private function getResourceLinks(EntityResource $resource) { $links = []; foreach ($this->resource->getMetadata()->relationships->toOne as $relationship => $relation) { $entity = $this->resource->callGetter($relationship); EntityResource::validateToOneRelation($entity, $relationship); $links[$relationship] = $this->securityContext->isGranted(static::ACCESS_VIEW, $entity) ? EntityResource::getStringId($entity) : NULL; } foreach ($this->resource->getMetadata()->relationships->toMany as $relationship => $relation) { $collection = $this->resource->callGetter($relationship); $collection = EntityResource::normalizeToManyRelation($collection, $relationship); $links[$relationship] = []; foreach ($collection as $entity) { if (!$this->securityContext->isGranted(static::ACCESS_VIEW, $entity)) { continue; } $links[$relationship][] = EntityResource::getStringId($entity); } } return $links; }
/** * @param ResourceCollectionInterface $resources * @param $relationshipName * @param LinkedResourcesSerialization $resourcesSerialization * @param array &$linkedResources */ private function processToOneRelationship(ResourceCollectionInterface $resources, $relationshipName, array &$linkedResources, LinkedResourcesSerialization $resourcesSerialization) { foreach ($resources as $resource) { if ($resource->isRelationshipBlacklisted($relationshipName)) { $message = sprintf(self::ERROR_UNKOWN_RELATIONSHIP, $relationshipName); throw new InvalidRelationshipException($message); } $relationship = $resource->getMetadata()->relationships->toOne[$relationshipName]; // @todo Refactorizar; la siguiente línea es un hack. $entity = $resource->callGetter($relationshipName); EntityResource::validateToOneRelation($entity, $relationshipName); if (is_null($entity)) { continue; } $this->addLinkedResource($relationship, $entity, $resourcesSerialization); $linkedResource = $resourcesSerialization->getLinkedResource($relationship->type, EntityResource::getStringId($entity)); if (!empty($linkedResource)) { $linkedResources[] = $linkedResource; } } }