/** * @param ServiceLocatorInterface $serviceLocator * @return Plugin\Hal */ public function createService(ServiceLocatorInterface $serviceLocator) { $services = $serviceLocator->getServiceLocator(); $config = $services->get('Config'); $metadataMap = $services->get('ZF\Hal\MetadataMap'); $hydrators = $metadataMap->getHydratorManager(); $serverUrlHelper = $serviceLocator->get('ServerUrl'); if (isset($config['zf-hal']['options']['use_proxy'])) { $serverUrlHelper->setUseProxy($config['zf-hal']['options']['use_proxy']); } $urlHelper = $serviceLocator->get('Url'); $helper = new Plugin\Hal($hydrators); $helper ->setMetadataMap($metadataMap) ->setServerUrlHelper($serverUrlHelper) ->setUrlHelper($urlHelper); if (isset($config['zf-hal']) && isset($config['zf-hal']['renderer']) ) { $config = $config['zf-hal']['renderer']; if (isset($config['default_hydrator'])) { $hydratorServiceName = $config['default_hydrator']; if (!$hydrators->has($hydratorServiceName)) { throw new Exception\DomainException(sprintf( 'Cannot locate default hydrator by name "%s" via the HydratorManager', $hydratorServiceName )); } $hydrator = $hydrators->get($hydratorServiceName); $helper->setDefaultHydrator($hydrator); } if (isset($config['render_embedded_resources'])) { $helper->setRenderEmbeddedEntities($config['render_embedded_resources']); } if (isset($config['render_embedded_entities'])) { $helper->setRenderEmbeddedEntities($config['render_embedded_entities']); } if (isset($config['render_collections'])) { $helper->setRenderCollections($config['render_collections']); } if (isset($config['hydrators']) && is_array($config['hydrators'])) { $hydratorMap = $config['hydrators']; foreach ($hydratorMap as $class => $hydratorServiceName) { $helper->addHydrator($class, $hydratorServiceName); } } } return $helper; }
/** * @param ContainerInterface|\Zend\ServiceManager\ServiceLocatorInterface $container * @return Plugin\Hal */ public function __invoke(ContainerInterface $container) { $container = $container instanceof AbstractPluginManager ? $container->getServiceLocator() : $container; /* @var $rendererOptions \ZF\Hal\RendererOptions */ $rendererOptions = $container->get('ZF\\Hal\\RendererOptions'); $metadataMap = $container->get('ZF\\Hal\\MetadataMap'); /** @var HydratorPluginManager $hydrators */ $hydrators = $metadataMap->getHydratorManager(); $helper = new Plugin\Hal($hydrators); $helper->setMetadataMap($metadataMap); $linkUrlBuilder = $container->get(Link\LinkUrlBuilder::class); $helper->setLinkUrlBuilder($linkUrlBuilder); $linkCollectionExtractor = $container->get(LinkCollectionExtractor::class); $helper->setLinkCollectionExtractor($linkCollectionExtractor); $defaultHydrator = $rendererOptions->getDefaultHydrator(); if ($defaultHydrator) { if (!$hydrators->has($defaultHydrator)) { throw new Exception\DomainException(sprintf('Cannot locate default hydrator by name "%s" via the HydratorManager', $defaultHydrator)); } /** @var HydratorInterface $hydrator */ $hydrator = $hydrators->get($defaultHydrator); $helper->setDefaultHydrator($hydrator); } $helper->setRenderEmbeddedEntities($rendererOptions->getRenderEmbeddedEntities()); $helper->setRenderCollections($rendererOptions->getRenderEmbeddedCollections()); $hydratorMap = $rendererOptions->getHydrators(); foreach ($hydratorMap as $class => $hydratorServiceName) { $helper->addHydrator($class, $hydratorServiceName); } return $helper; }
/** * @param ServiceLocatorInterface $serviceLocator * @return Plugin\Hal */ public function createService(ServiceLocatorInterface $serviceLocator) { $services = $serviceLocator->getServiceLocator(); $halConfig = $services->get('ZF\\Hal\\HalConfig'); /* @var $rendererOptions \ZF\Hal\RendererOptions */ $rendererOptions = $services->get('ZF\\Hal\\RendererOptions'); $metadataMap = $services->get('ZF\\Hal\\MetadataMap'); $hydrators = $metadataMap->getHydratorManager(); $serverUrlHelper = $serviceLocator->get('ServerUrl'); if (isset($halConfig['options']['use_proxy'])) { $serverUrlHelper->setUseProxy($halConfig['options']['use_proxy']); } $urlHelper = $serviceLocator->get('Url'); $helper = new Plugin\Hal($hydrators); $helper->setMetadataMap($metadataMap)->setServerUrlHelper($serverUrlHelper)->setUrlHelper($urlHelper); $linkExtractor = new LinkExtractor($serverUrlHelper, $urlHelper); $linkCollectionExtractor = new LinkCollectionExtractor($linkExtractor); $helper->setLinkCollectionExtractor($linkCollectionExtractor); $defaultHydrator = $rendererOptions->getDefaultHydrator(); if ($defaultHydrator) { if (!$hydrators->has($defaultHydrator)) { throw new Exception\DomainException(sprintf('Cannot locate default hydrator by name "%s" via the HydratorManager', $defaultHydrator)); } $hydrator = $hydrators->get($defaultHydrator); $helper->setDefaultHydrator($hydrator); } $helper->setRenderEmbeddedEntities($rendererOptions->getRenderEmbeddedEntities()); $helper->setRenderCollections($rendererOptions->getRenderEmbeddedCollections()); $helper->setUseResourceLinksInsteadOfEmbeddedEntityLink($rendererOptions->getUseResourceLinksInsteadOfEmbeddedEntityLink()); $hydratorMap = $rendererOptions->getHydrators(); foreach ($hydratorMap as $class => $hydratorServiceName) { $helper->addHydrator($class, $hydratorServiceName); } return $helper; }
public function testUsesDefaultHydratorIfAvailable() { $this->plugin->setDefaultHydrator(new Hydrator\ArraySerializable()); $item = new HalTestAsset\ArraySerializable(); $item = new Entity(new HalTestAsset\ArraySerializable(), 'identifier'); $links = $item->getLinks(); $self = new Link('self'); $self->setRoute('resource')->setRouteParams(['id' => 'identifier']); $links->add($self); $result = $this->plugin->renderEntity($item); $this->assertRelationalLinkEquals('http://localhost.localdomain/resource/identifier', 'self', $result); $this->assertArrayHasKey('foo', $result); $this->assertEquals('bar', $result['foo']); }