First Server-Side Table
After Quick Start, most Symfony apps need a Doctrine-backed table with paging and search on the server. This page is the shortest path.
What You Need
- Bundle installed and routes imported
- An entity (for example
User) #[AsDataTable]+AbstractDataTable
Steps
Create the DataTable class
use App\Entity\User;
use Pentiminax\UX\DataTables\Attribute\AsDataTable;
use Pentiminax\UX\DataTables\Column\NumberColumn;
use Pentiminax\UX\DataTables\Column\TextColumn;
use Pentiminax\UX\DataTables\Model\AbstractDataTable;
use Pentiminax\UX\DataTables\Model\DataTable;
#[AsDataTable(User::class)]
final class UsersDataTable extends AbstractDataTable
{
public function configureColumns(): iterable
{
yield NumberColumn::new('id', 'ID');
yield TextColumn::new('email', 'Email');
}
protected function configureDataTable(DataTable $table): DataTable
{
return $table->serverSide()->processing();
}
protected function mapRow(mixed $item): array
{
/** @var User $item */
return [
'id' => $item->getId(),
'email' => $item->getEmail(),
];
}
}Render it
use Symfony\Component\Routing\Attribute\Route;
#[Route('/users', name: 'users')]
public function index(UsersDataTable $table): Response
{
return $this->render('user/index.html.twig', [
'table' => $table,
]);
}{{ render_datatable(table) }}Secure Ajax
Protect ^/datatables/ajax before production. Continue to
Securing Ajax Routes.
Next Steps
- Filters on the same table
- Actions with CSRF and voter
- Full details in Server-Side Processing