apply($queryBuilder, $resourceClass, $operation); } /** * Called by doctrine when getting an item * * @param QueryBuilder $queryBuilder * @param QueryNameGeneratorInterface $queryNameGenerator * @param string $resourceClass * @param list $identifiers * @param Operation|null $operation * @param mixed[] $context * @return void * @throws Exception */ public function applyToItem(QueryBuilder $queryBuilder, QueryNameGeneratorInterface $queryNameGenerator, string $resourceClass, array $identifiers, Operation $operation = null, array $context = []): void { $this->apply($queryBuilder, $resourceClass, $operation); } /** * Generic application of the extension * * @param $queryBuilder * @param $resourceClass * @return void */ protected function apply(QueryBuilder $queryBuilder, string $resourceClass, ?Operation $operation): void { if (!$this->supports($resourceClass, $operation)) { return; } $this->addWhere($queryBuilder, $resourceClass, $operation); } /** * Returns true if the extension supports the given resource * * @param string $resourceClass * @return bool */ abstract protected function supports(string $resourceClass, ?Operation $operation): bool; /** * Add one or more filters to the query * * @param QueryBuilder $queryBuilder * @param string $resourceClass * @return void */ abstract protected function addWhere(QueryBuilder $queryBuilder, string $resourceClass, ?Operation $operation): void; }