/** * Add Filters for parent resource * * @param FilterBuilder $builder */ protected function addFiltersForParentResources(FilterBuilder $builder) { if ($parentResource = $this->apiResource->getParentResource()) { $qb = $builder->getQueryBuilder(); $em = $qb->getEntityManager(); $rootEntity = $qb->getRootEntities()[0]; $this->addFilterForParent($builder, $rootEntity, $em, $parentResource); } }
/** * @param ApiResource $apiResource * @param Request $request * @return ApiResource[] */ protected function getParentResources(ApiResource $apiResource, Request $request) { $parents = []; if ($parentResource = $apiResource->getParentResource()) { $id = $request->attributes->get($parentResource->getRoutePlaceholder()); $parentResource->setIdentifierValue($id); $parents[] = $parentResource; foreach ($this->getParentResources($parentResource, $request) as $parentsParent) { $id = $request->attributes->get($parentsParent->getRoutePlaceholder()); $parentsParent->setIdentifierValue($id); $parents[] = $parentsParent; } } return $parents; }
/** * @param ApiResource $apiResource * @param array $searchParams * @param bool $public * @return array */ private function getParams(ApiResource $apiResource, $searchParams = [], $public = false) { if ($parentResource = $apiResource->getParentResource()) { $key = $public ? $apiResource->getAssocParent() : FilterDecorator::getFilterName($parentResource); $searchParams[$key] = $parentResource->getIdentifierValue(); $searchParams = array_merge($searchParams, $this->getParams($parentResource, $searchParams, $public)); } return $searchParams; }