Skip to content

Pagination🔗

ArgumentResolver🔗

Reference : Symfony ArgumentValueResolver

On utilise 2 classes afin d'avoir accès directement aux informations de pagination dans un controller:

Utilisations🔗

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
<?php
class AlbumController
{
    public function list(Pagination $pagination): Response
    {
        /** @var PaginatedData */
        $paginatedData = $this->getQueryBus(new ListQuery($pagination));

        return $this->render('list.html.twig', ['pagination' => $paginatedData]);
    }
}

Repositories🔗

  • PaginatorInterface : une interface que tous nos repositories doivent renvoyer lors d'une pagination.
  • A Doctrine Paginator : L'implementation de cet interface pour Doctrine ORM.
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
<?php
class AlbumRepository
{
    /**
     * @return PaginatorInterface<Album>
     */
    public function listPaginated(
        Pagination $pagination,
        array $filters = [],
        array $orderBy = []
    ): PaginatorInterface {
        $queryBuilder = $this->createQueryBuilder('album');

        $this->applyFilters($queryBuilder, $filters);
        $this->applyOrderBy($queryBuilder, $orderBy);

        return Paginator::createFromQueryBuilder($queryBuilder, $pagination);
    }
}

View🔗

1
2
<?php
PaginatedData::createFromPaginator($paginator);
1
2
3
4
<?php
PaginatedData::createFromPaginator($paginator, static function (Album $album) use ($stats): AlbumView {
    return AlbumView::create($album, $stats[$album->getReference()] ?? null);
});

Project references🔗


Last update: December 20, 2024