$collectionExtensions */ public function __construct( private EntityManagerInterface $em, #[AutowireIterator(tag: 'api_platform.doctrine.orm.query_extension.collection')] private iterable $collectionExtensions, private Pagination $pagination, ) { } /** * Applique les extension natives d'api platform (filtres, pagination, etc.). * * @param array $context */ public function applyCollectionExtensionsAndPagination(string $entityClass, Operation $operation, array $context = []): TraversablePaginator { $qb = $this->em->getRepository($entityClass)->createQueryBuilder('o'); $queryNameGenerator = new QueryNameGenerator(); foreach ($this->collectionExtensions as $extension) { if ($extension instanceof QueryCollectionExtensionInterface) { $extension->applyToCollection( $qb, $queryNameGenerator, $entityClass, $operation, $context ); } } $doctrinePaginator = new DoctrinePaginator($qb); return new TraversablePaginator( $doctrinePaginator, $this->pagination->getPage($context), $this->pagination->getLimit($operation, $context), count($doctrinePaginator) // Nombre total d'éléments pour générer "last", "next", etc. ); } /** * @param array $mappedItems */ public function getTraversablePaginator(array $mappedItems, TraversablePaginator $originalPaginator): TraversablePaginator { return new TraversablePaginator( new \ArrayIterator($mappedItems), $originalPaginator->getCurrentPage(), $originalPaginator->getItemsPerPage(), $originalPaginator->getTotalItems() ); } }