Paginer les données — Formation Symfony 7

Jusqu’à maintenant nous avons utilisé un findAll() pour lister l’ensemble des résultats. Mais dans un cas réel on va vouloir imposer une limite sur le nombre de résultats à afficher et on va souhaiter mettre en place un système de pagination.

Via doctrine

Doctrine dispose d’une classe permettant de gérer la pagination.

use Doctrine\ORM\Tools\Pagination\Paginator;

$queryBuilder = $this
    ->createQueryBuilder('r')
    ->setFirstResult(($page - 1) * $limit)
    ->setMaxResults($limit);

$paginator = new Paginator($query, fetchJoinCollection: false);

Cet objet paginator implémente les interfaces Countable et IteratorAggregate. Lors du count() il génèrera une requête permettant de compter l’ensemble des résultats.

KnpPaginatorBundle

Le bundle KnpPaginatorBundle offre plus de fonctionnalités avec la possibilité de gérer l’organisation mais aussi la partie template avec la structure HTML d’une pagination. Aussi, si votre objectif est de paginer des résultats dans une page Web je vous conseille d’utiliser ce bundle.