Server-Side Processing
Move filtering, ordering, and paging to the backend for large datasets.
Minimal Setup
use Pentiminax\UX\DataTables\Model\DataTable;
$dataTable = new DataTable('products');
$dataTable
->ajax('/api/products')
->serverSide(true)
->processing(true);
Request Parameters Sent By DataTables
| Parameter | Purpose |
|---|---|
| `draw` | Request sequence number |
| `start` | Offset |
| `length` | Page size |
| `search[value]` | Global search term |
| `order[n][column]` | Sorted column index |
| `order[n][dir]` | Sort direction |
| `columns[n][name]` | Column name |
| `columns[n][search][value]` | Per-column filter |
Parse Request With DataTableRequest
use Pentiminax\UX\DataTables\DataTableRequest\DataTableRequest;
$requestDto = DataTableRequest::fromRequest($request);
Typical Controller With AbstractDataTable
use Pentiminax\UX\DataTables\DataTableRequest\DataTableRequest;
if ($request->isXmlHttpRequest()) {
$table->handleRequest($request);
return $table->getResponse();
}
if (!$table->getDataTable()->isServerSide()) {
$table->fetchData(DataTableRequest::fromRequest($request));
}
Best Practices
- Always whitelist sortable/searchable fields in your query layer.
- Keep backend response time predictable (indexes, query limits).
- Prefer
AbstractDataTablefor reusable query behavior. - Ensure your table resolves a provider in server-side mode, either through
createDataProvider()or#[AsDataTable(...)]; otherwisegetResponse()falls back to an empty payload.