protected function exportEmbed(ContextInterface $context, ResourceInterface $resource, Embed $embed, $instance) { $routeName = $embed->getRouteName(); $embedResourceDefinition = $this->compilerCache->findResourceDefinition($routeName); if ($embedResourceDefinition !== null) { $embedAction = $embedResourceDefinition->findActionByRouteName($routeName); if ($embedAction !== null) { $embedTransform = $embedAction->getTransform(); $embedTransformMapping = $embedAction->getTransformMapping(); $embedContext = EmbedContext::create($embedResourceDefinition, $context, $embed->getName()); $value = $this->getEmbedValue($embedTransform, $embedTransformMapping, $embed, $instance); if ($value === null) { } else { if (is_array($value) === true || is_a($value, '\\Traversable') === true) { $items = []; foreach ($value as $item) { $export = $embedTransform->export($embedContext, $resource, $embedTransformMapping, $item); $items[] = $export; } return $this->factory->createCollectionResponse($embedResourceDefinition, $resource, $context, null, $items); } else { return $embedTransform->export($embedContext, $resource, $embedTransformMapping, $value); } } } } return null; }
/** * {@inheritdoc} */ public function rolesForEmbed(Embed $embed, $pathPrefix) { $roles = [$this->roleName($pathPrefix, 'embed', $embed->getName()), $this->roleName($pathPrefix, 'embed', 'all')]; return $this->makeRoles($roles); }