Type to search columns, filters, options, and extensions.

to navigate · Enter to open · Esc to close

Documentation

First Server-Side Table

Build your first Doctrine-backed AbstractDataTable with automatic Ajax wiring

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

  1. Bundle installed and routes imported
  2. An entity (for example User)
  3. #[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 $row): array
        {
            /** @var User $row */
            return [
                'id'    => $row->getId(),
                'email' => $row->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