Skip to content

Commit 6f3ee5d

Browse files
authored
Merge pull request #19011 from craftcms/feature/cleanup-table-requests
[6.x] Move table request calls into separate request class
2 parents b8d8cae + 8d3e5b2 commit 6f3ee5d

4 files changed

Lines changed: 109 additions & 143 deletions

File tree

src/Http/Controllers/FieldsController.php

Lines changed: 22 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@
44

55
namespace CraftCms\Cms\Http\Controllers;
66

7-
use CraftCms\Cms\Cms;
87
use CraftCms\Cms\Component\ComponentHelper;
98
use CraftCms\Cms\Component\Contracts\Chippable;
109
use CraftCms\Cms\Component\Contracts\Colorable;
@@ -28,6 +27,7 @@
2827
use CraftCms\Cms\FieldLayout\FieldLayoutElement;
2928
use CraftCms\Cms\FieldLayout\FieldLayoutTab;
3029
use CraftCms\Cms\FieldLayout\LayoutElements\CustomField;
30+
use CraftCms\Cms\Http\Requests\TableRequest;
3131
use CraftCms\Cms\Http\RespondsWithFlash;
3232
use CraftCms\Cms\Http\Responses\CpScreenResponse;
3333
use CraftCms\Cms\Support\Arr;
@@ -40,6 +40,7 @@
4040
use CraftCms\Cms\View\HtmlStack;
4141
use CraftCms\Cms\View\LegacyAssets\FieldSettingsAsset;
4242
use CraftCms\Cms\View\LegacyAssets\InternalAssetRegistry;
43+
use Deprecated;
4344
use Illuminate\Http\JsonResponse;
4445
use Illuminate\Http\Request;
4546
use Illuminate\Validation\ValidationException;
@@ -59,45 +60,32 @@ class FieldsController
5960

6061
public function __construct(
6162
GeneralConfig $generalConfig,
62-
private HtmlStack $HtmlStack,
63+
private readonly HtmlStack $HtmlStack,
6364
private readonly Fields $fieldsService,
6465
) {
6566
$this->readOnly = ! $generalConfig->allowAdminChanges;
6667
}
6768

68-
public function index(Request $request)
69+
public function index(TableRequest $request)
6970
{
70-
$page = (int) $request->input(Cms::config()->getPageTriggerParam(), 1);
71-
$limit = (int) $request->input('per_page', 100);
72-
$searchTerm = $request->input('search');
73-
74-
$sort = ! empty($request->array('sort')) ? $request->array('sort') : [
75-
['field' => 'name', 'direction' => 'asc'],
76-
];
77-
78-
$orderBy = match (Arr::get($sort, '0.field')) {
79-
'handle' => 'handle',
80-
'type' => 'type',
81-
default => 'name',
82-
};
83-
84-
$sortDir = match (Arr::get($sort, '0.direction')) {
85-
'desc' => SORT_DESC,
86-
default => SORT_ASC,
87-
};
88-
89-
[$pagination, $tableData] = $this->fieldsService->getTableData($page, $limit, $searchTerm, $orderBy, $sortDir);
71+
[$pagination, $tableData] = $this->fieldsService->getTableData(
72+
page: $request->page(),
73+
limit: $request->limit(),
74+
searchTerm: $request->search(),
75+
orderBy: $request->orderBy(),
76+
sortDir: $request->sortDir(),
77+
);
9078

9179
return Inertia::render('settings/Fields', [
9280
'crumbs' => fn () => [
9381
['label' => t('Settings'), 'url' => Url::cpUrl('settings')],
9482
['label' => t('Fields')],
9583
],
9684
'title' => t('Fields'),
97-
'sort' => $sort,
85+
'sort' => $request->sort(),
9886
'data' => fn () => $tableData,
9987
'pagination' => fn () => $pagination,
100-
'searchTerm' => $searchTerm,
88+
'searchTerm' => $request->search(),
10189
]);
10290
}
10391

@@ -327,23 +315,16 @@ public function renderCardPreview(Request $request, Fields $fields): JsonRespons
327315
]);
328316
}
329317

330-
#[\Deprecated(message: 'in 6.0. Use `settings/fields` instead.')]
331-
public function tableData(Request $request): Response
318+
#[Deprecated(message: 'in 6.0. Use `settings/fields` instead.')]
319+
public function tableData(TableRequest $request): Response
332320
{
333-
$page = (int) $request->input(Cms::config()->getPageTriggerParam(), 1);
334-
$limit = (int) $request->input('per_page', 100);
335-
$searchTerm = $request->input('search');
336-
$orderBy = match ($request->input('sort.0.field')) {
337-
'__slot:handle' => 'handle',
338-
'type' => 'type',
339-
default => 'name',
340-
};
341-
$sortDir = match ($request->input('sort.0.direction')) {
342-
'desc' => SORT_DESC,
343-
default => SORT_ASC,
344-
};
345-
346-
[$pagination, $tableData] = $this->fieldsService->getTableData($page, $limit, $searchTerm, $orderBy, $sortDir);
321+
[$pagination, $tableData] = $this->fieldsService->getTableData(
322+
page: $request->page(),
323+
limit: $request->limit(),
324+
searchTerm: $request->search(),
325+
orderBy: $request->orderBy(),
326+
sortDir: $request->sortDir(),
327+
);
347328

348329
return $this->asSuccess(data: [
349330
'pagination' => $pagination,

src/Http/Controllers/Settings/EntryTypesController.php

Lines changed: 19 additions & 47 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@
44

55
namespace CraftCms\Cms\Http\Controllers\Settings;
66

7-
use CraftCms\Cms\Cms;
87
use CraftCms\Cms\Component\Contracts\Iconic;
98
use CraftCms\Cms\Config\GeneralConfig;
109
use CraftCms\Cms\Cp\Html\ContentHtml;
@@ -22,6 +21,7 @@
2221
use CraftCms\Cms\FieldLayout\FieldLayout;
2322
use CraftCms\Cms\FieldLayout\FieldLayoutElement;
2423
use CraftCms\Cms\FieldLayout\LayoutElements\Entries\EntryTitleField;
24+
use CraftCms\Cms\Http\Requests\TableRequest;
2525
use CraftCms\Cms\Http\RespondsWithFlash;
2626
use CraftCms\Cms\Http\Responses\CpScreenResponse;
2727
use CraftCms\Cms\Section\Data\Section;
@@ -32,6 +32,7 @@
3232
use CraftCms\Cms\Support\Str;
3333
use CraftCms\Cms\Support\Url;
3434
use CraftCms\Cms\View\HtmlStack;
35+
use Deprecated;
3536
use Illuminate\Http\JsonResponse;
3637
use Illuminate\Http\Request;
3738
use Inertia\Inertia;
@@ -62,32 +63,14 @@ public function __construct(
6263
}
6364
}
6465

65-
public function index(Request $request)
66+
public function index(TableRequest $request)
6667
{
67-
$page = (int) $request->input(Cms::config()->getPageTriggerParam(), 1);
68-
$limit = (int) $request->input('per_page', 100);
69-
$searchTerm = $request->input('search');
70-
71-
$sort = ! empty($request->array('sort')) ? $request->array('sort') : [
72-
['field' => 'name', 'direction' => 'asc'],
73-
];
74-
75-
$orderBy = match (Arr::get($sort, '0.field')) {
76-
'handle' => 'handle',
77-
'type' => 'type',
78-
default => 'name',
79-
};
80-
81-
$sortDir = match (Arr::get($sort, '0.direction')) {
82-
'desc' => SORT_DESC,
83-
default => SORT_ASC,
84-
};
85-
86-
[$pagination, $tableData] = $this->entryTypes->getTableData(page: $page,
87-
limit: $limit,
88-
searchTerm: $searchTerm,
89-
orderBy: $orderBy,
90-
sortDir: $sortDir,
68+
[$pagination, $tableData] = $this->entryTypes->getTableData(
69+
page: $request->page(),
70+
limit: $request->limit(),
71+
searchTerm: $request->search(),
72+
orderBy: $request->orderBy(),
73+
sortDir: $request->sortDir(),
9174
);
9275

9376
return Inertia::render('settings/EntryTypes', [
@@ -96,8 +79,8 @@ public function index(Request $request)
9679
['label' => t('Entry Types')],
9780
],
9881
'title' => t('Entry Types'),
99-
'searchTerm' => $searchTerm,
100-
'sort' => $sort,
82+
'searchTerm' => $request->search(),
83+
'sort' => $request->sort(),
10184
'data' => fn () => $tableData,
10285
'pagination' => fn () => $pagination,
10386
'readOnly' => $this->readOnly,
@@ -234,26 +217,15 @@ public function edit(Request $request, ?EntryTypeModel $entryType = null): CpScr
234217
);
235218
}
236219

237-
#[\Deprecated(message: 'in 6.0. Use `settings/entry-types` instead.')]
238-
public function tableData(Request $request): JsonResponse
220+
#[Deprecated(message: 'in 6.0. Use `settings/entry-types` instead.')]
221+
public function tableData(TableRequest $request): JsonResponse
239222
{
240-
$page = (int) $request->input(Cms::config()->getPageTriggerParam(), 1);
241-
$limit = (int) $request->input('per_page', 100);
242-
$searchTerm = $request->input('search');
243-
$orderBy = match ($request->input('sort.0.field')) {
244-
'__slot:handle' => 'handle',
245-
default => 'name',
246-
};
247-
$sortDir = match ($request->input('sort.0.direction')) {
248-
'desc' => SORT_DESC,
249-
default => SORT_ASC,
250-
};
251-
252-
[$pagination, $tableData] = $this->entryTypes->getTableData(page: $page,
253-
limit: $limit,
254-
searchTerm: $searchTerm,
255-
orderBy: $orderBy,
256-
sortDir: $sortDir,
223+
[$pagination, $tableData] = $this->entryTypes->getTableData(
224+
page: $request->page(),
225+
limit: $request->limit(),
226+
searchTerm: $request->search(),
227+
orderBy: $request->orderBy(),
228+
sortDir: $request->sortDir(),
257229
);
258230

259231
return new JsonResponse([

src/Http/Controllers/Settings/SectionsController.php

Lines changed: 17 additions & 55 deletions
Original file line numberDiff line numberDiff line change
@@ -4,13 +4,13 @@
44

55
namespace CraftCms\Cms\Http\Controllers\Settings;
66

7-
use CraftCms\Cms\Cms;
87
use CraftCms\Cms\Config\GeneralConfig;
98
use CraftCms\Cms\Cp\SelectOptions;
109
use CraftCms\Cms\Database\Table;
1110
use CraftCms\Cms\Element\Element;
1211
use CraftCms\Cms\Element\Enums\PropagationMethod;
1312
use CraftCms\Cms\Entry\EntryTypes;
13+
use CraftCms\Cms\Http\Requests\TableRequest;
1414
use CraftCms\Cms\Http\RespondsWithFlash;
1515
use CraftCms\Cms\Http\Responses\CpScreenResponse;
1616
use CraftCms\Cms\Section\Data\Section as SectionData;
@@ -21,8 +21,8 @@
2121
use CraftCms\Cms\Section\Resources\SectionResource;
2222
use CraftCms\Cms\Section\Sections;
2323
use CraftCms\Cms\Site\Sites;
24-
use CraftCms\Cms\Support\Arr;
2524
use CraftCms\Cms\Support\Url;
25+
use Deprecated;
2626
use Illuminate\Http\Request;
2727
use Illuminate\Validation\Rule;
2828
use Symfony\Component\HttpFoundation\Response;
@@ -42,34 +42,14 @@ public function __construct(
4242
$this->readOnly = ! $generalConfig->allowAdminChanges;
4343
}
4444

45-
public function index(Request $request, Sections $sections): CpScreenResponse
45+
public function index(TableRequest $request, Sections $sections): CpScreenResponse
4646
{
47-
$pageParam = Cms::config()->getPageTriggerParam();
48-
$page = $request->integer($pageParam, 1);
49-
$limit = $request->integer('per_page', 50);
50-
$searchTerm = $request->input('search');
51-
52-
$sort = ! empty($request->array('sort')) ? $request->array('sort') : [
53-
['field' => 'name', 'direction' => 'asc'],
54-
];
55-
56-
$orderBy = match (Arr::get($sort, '0.field')) {
57-
'handle' => 'handle',
58-
'type' => 'type',
59-
default => 'name',
60-
};
61-
62-
$sortDir = match (Arr::get($sort, '0.direction')) {
63-
'desc' => SORT_DESC,
64-
default => SORT_ASC,
65-
};
66-
6747
[$pagination, $tableData] = $sections->getSectionTableData(
68-
page: $page,
69-
limit: $limit,
70-
searchTerm: $searchTerm,
71-
orderBy: $orderBy,
72-
sortDir: $sortDir,
48+
page: $request->page(),
49+
limit: $request->limit(),
50+
searchTerm: $request->search(),
51+
orderBy: $request->orderBy(),
52+
sortDir: $request->sortDir(),
7353
);
7454

7555
return new CpScreenResponse()
@@ -81,8 +61,8 @@ public function index(Request $request, Sections $sections): CpScreenResponse
8161
->inertiaPage('settings/Sections', [
8262
'data' => fn () => $tableData,
8363
'pagination' => fn () => $pagination,
84-
'sort' => $sort,
85-
'searchTerm' => $searchTerm,
64+
'sort' => $request->sort(),
65+
'searchTerm' => $request->search(),
8666
'emptyMessage' => t('No sections exist yet.'),
8767
'readOnly' => $this->readOnly,
8868
]);
@@ -249,33 +229,15 @@ public function destroy(Request $request, Sections $sections): Response
249229
]));
250230
}
251231

252-
#[\Deprecated(message: 'in 6.0. Use `settings/sections` instead.')]
253-
public function tableData(Request $request, Sections $sections): Response
232+
#[Deprecated(message: 'in 6.0. Use `settings/sections` instead.')]
233+
public function tableData(TableRequest $request, Sections $sections): Response
254234
{
255-
$pageParam = Cms::config()->getPageTriggerParam();
256-
$page = (int) $request->input($pageParam, 1);
257-
$limit = (int) $request->input('per_page', 100);
258-
$searchTerm = $request->input('search');
259-
260-
$sort = $request->input('sort');
261-
262-
$orderBy = match (Arr::get($sort, '0.field')) {
263-
'__slot:handle' => 'handle',
264-
'type' => 'type',
265-
default => 'name',
266-
};
267-
268-
$sortDir = match (Arr::get($sort, '0.direction')) {
269-
'desc' => SORT_DESC,
270-
default => SORT_ASC,
271-
};
272-
273235
[$pagination, $tableData] = $sections->getSectionTableData(
274-
page: $page,
275-
limit: $limit,
276-
searchTerm: $searchTerm,
277-
orderBy: $orderBy,
278-
sortDir: $sortDir,
236+
page: $request->page(),
237+
limit: $request->limit(),
238+
searchTerm: $request->search(),
239+
orderBy: $request->orderBy(),
240+
sortDir: $request->sortDir(),
279241
);
280242

281243
return $this->asSuccess(data: [

src/Http/Requests/TableRequest.php

Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
<?php
2+
3+
declare(strict_types=1);
4+
5+
namespace CraftCms\Cms\Http\Requests;
6+
7+
use CraftCms\Cms\Cms;
8+
use CraftCms\Cms\Support\Arr;
9+
use Illuminate\Foundation\Http\FormRequest;
10+
11+
class TableRequest extends FormRequest
12+
{
13+
public function page(): int
14+
{
15+
return $this->integer(Cms::config()->getPageTriggerParam(), 1);
16+
}
17+
18+
public function limit(): int
19+
{
20+
return $this->integer('per_page', 100);
21+
}
22+
23+
public function search(): ?string
24+
{
25+
return $this->input('search');
26+
}
27+
28+
public function sort(): array
29+
{
30+
return ! empty($this->array('sort')) ? $this->array('sort') : [
31+
['field' => 'name', 'direction' => 'asc'],
32+
];
33+
}
34+
35+
public function orderBy(): string
36+
{
37+
return match (Arr::get($this->sort(), '0.field')) {
38+
'__slot:handle', 'handle' => 'handle',
39+
'type' => 'type',
40+
default => 'name',
41+
};
42+
}
43+
44+
public function sortDir(): int
45+
{
46+
return match (Arr::get($this->sort(), '0.direction')) {
47+
'desc' => SORT_DESC,
48+
default => SORT_ASC,
49+
};
50+
}
51+
}

0 commit comments

Comments
 (0)