I'm developing an application with symfony4, in which I'm using api-platform. I've created a custom dataprovider for a specific entity (Car for example). CarCollectionDataProvider returns all blue cars.
<?php
namespace App\DataProvider;
use ApiPlatform\Core\Bridge\Doctrine\Orm\Extension\PaginationExtension;
use ApiPlatform\Core\Bridge\Doctrine\Orm\Util\QueryNameGenerator;
use ApiPlatform\Core\DataProvider\CollectionDataProviderInterface;
use ApiPlatform\Core\DataProvider\RestrictedDataProviderInterface;
use App\Entity\Car;
use Doctrine\Common\Persistence\ManagerRegistry;
use Generator;
final class CarCollectionDataProvider implements CollectionDataProviderInterface, RestrictedDataProviderInterface
{
private $managerRegistry;
private $paginationExtenstion;
public function __construct(ManagerRegistry $managerRegistry, PaginationExtension $paginationExtension)
{
$this->managerRegistry = $managerRegistry;
$this->paginationExtenstion = $paginationExtension;
}
public function supports(string $resourceClass, string $operationName = null, array $context = []): bool
{
return Car::class === $resourceClass;
}
public function getCollection(string $resourceClass, string $operationName = null): Generator
{
$queryBuilder = $this->managerRegistry
->getManagerForClass($resourceClass)
->getRepository($resourceClass)->createQueryBuilder('car')
->where('car.color = :color')
->setParameter('color', 'blue');
$this->paginationExtenstion->applyToCollection($queryBuilder, new QueryNameGenerator(), $resourceClass, $operationName, []);
yield $this->paginationExtenstion->getResult($queryBuilder, $resourceClass, $operationName, []);
}
}
How can I inject api-platform's pagination extension on my custom dataprovider (CarCollectionDataProvider)?