/** * @param Request $request * @param $id * @param $embed * * @return ResourceInterface */ public function initFilterEmbed(Request $request, $id, $embed) { $embedShortname = ucwords(Inflector::singularize($embed)); /** @var $resourceEmbed ResourceInterface */ $resourceEmbed = $this->resourceResolver->getResourceForShortName($embedShortname, $this->router->getContext()->getApiVersion()); $filter = new EmbedFilter($this->managerRegistry, $this->propertyAccessor); $params = !$request->request->has('embedParams') ? ['embed' => $embed, 'id' => $id] : $request->request->get('embedParams'); $filter->setParameters($params); $filter->setRouteName($request->get('_route')); $resourceEmbed->addFilter($filter); return $resourceEmbed; }
/** * @param $data * @param $dataToSerialize */ protected function setEmbed($data, $dataToSerialize) { if (isset($data['tags']['embed']) && isset($data['tags']['collection'])) { $filter = new EmbedFilter($this->managerRegistry, $this->propertyAccessor); $item = $dataToSerialize->getIterator()->current(); if (null === ($params = $this->apiResource->getRouteKeyParams($item))) { $params['id'] = $this->propertyAccessor->getValue($item, 'id'); } $params['embed'] = $this->apiResource->getShortName(); $filter->setParameters($params); $filter->setRouteName($data['routeName']); $this->apiResource->addFilter($filter); } }