Paginer les données

Voir la vidéo
Description Sommaire

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.

Publié
Technologies utilisées
Auteur :
Grafikart
Partager