ApiPlatform\Core\Bridge\Doctrine\Orm\Extension\PaginationExtension::applyToCollection PHP Method

applyToCollection() public method

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);
    }

Usage Example

コード例 #1
0
 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');
 }