public applyToCollection ( Doctrine\ORM\QueryBuilder $queryBuilder, ApiPlatform\Core\Bridge\Doctrine\Orm\Util\QueryNameGeneratorInterface $queryNameGenerator, string $resourceClass, string $operationName = null ) | ||
$queryBuilder | Doctrine\ORM\QueryBuilder | |
$queryNameGenerator | ApiPlatform\Core\Bridge\Doctrine\Orm\Util\QueryNameGeneratorInterface | |
$resourceClass | string | |
$operationName | string |
public function applyToCollection(QueryBuilder $queryBuilder, QueryNameGeneratorInterface $queryNameGenerator, string $resourceClass, string $operationName = null)
{
$request = $this->requestStack->getCurrentRequest();
if (null === $request) {
return;
}
$resourceMetadata = $this->resourceMetadataFactory->create($resourceClass);
if (!$this->isPaginationEnabled($request, $resourceMetadata, $operationName)) {
return;
}
$itemsPerPage = $resourceMetadata->getCollectionOperationAttribute($operationName, 'pagination_items_per_page', $this->itemsPerPage, true);
if ($resourceMetadata->getCollectionOperationAttribute($operationName, 'pagination_client_items_per_page', $this->clientItemsPerPage, true)) {
$itemsPerPage = (int) $request->query->get($this->itemsPerPageParameterName, $itemsPerPage);
$itemsPerPage = null !== $this->maximumItemPerPage && $itemsPerPage >= $this->maximumItemPerPage ? $this->maximumItemPerPage : $itemsPerPage;
}
$queryBuilder->setFirstResult(($request->query->get($this->pageParameterName, 1) - 1) * $itemsPerPage)->setMaxResults($itemsPerPage);
}
public function testApplyToCollectionPaginationDisabled() { $requestStack = new RequestStack(); $requestStack->push(new Request()); $resourceMetadataFactoryProphecy = $this->prophesize(ResourceMetadataFactoryInterface::class); $resourceMetadataFactoryProphecy->create('Foo')->willReturn(new ResourceMetadata(null, null, null, [], []))->shouldBeCalled(); $resourceMetadataFactory = $resourceMetadataFactoryProphecy->reveal(); $queryBuilderProphecy = $this->prophesize(QueryBuilder::class); $queryBuilderProphecy->setFirstResult(Argument::any())->shouldNotBeCalled(); $queryBuilderProphecy->setMaxResults(Argument::any())->shouldNotBeCalled(); $queryBuilder = $queryBuilderProphecy->reveal(); $extension = new PaginationExtension($this->prophesize(ManagerRegistry::class)->reveal(), $requestStack, $resourceMetadataFactory, false); $extension->applyToCollection($queryBuilder, new QueryNameGenerator(), 'Foo', 'op'); }