/** * @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 testCreateCollectionWithoutForcedSelfLinks() { $collection = ['foo' => 'bar']; $metadata = new MetadataMap(['ZF\\Hal\\Collection' => ['is_collection' => true, 'route_name' => 'hostname/contacts', 'entity_route_name' => 'hostname/embedded', 'links' => [], 'force_self_link' => false]]); $this->plugin->setMetadataMap($metadata); $result = $this->plugin->createCollection($collection); $links = $result->getLinks(); $this->assertFalse($links->has('self')); }
/** * @expectedException \Zend\Mvc\Router\Exception\RuntimeException */ public function testNotExistingRouteInMetadataLinks() { $object = new TestAsset\Entity('foo', 'Foo'); $object->first_child = new TestAsset\EmbeddedEntity('bar', 'Bar'); $entity = new Entity($object, 'foo'); $self = new Link('self'); $self->setRoute('hostname/resource', ['id' => 'foo']); $entity->getLinks()->add($self); $metadata = new MetadataMap(['ZFTest\\Hal\\Plugin\\TestAsset\\EmbeddedEntity' => ['hydrator' => 'Zend\\Hydrator\\ObjectProperty', 'route' => 'hostname/embedded', 'route_identifier_name' => 'id', 'entity_identifier_name' => 'id', 'links' => ['link' => ['rel' => 'link', 'route' => ['name' => 'non_existing_route']]]]]); $this->plugin->setMetadataMap($metadata); $this->plugin->renderEntity($entity); }
/** * @param $collection * @param $metadataMap * @param $expectedResult * @param $exception * * @dataProvider renderCollectionWithMaxDepthProvider */ public function testRenderCollectionWithMaxDepth($collection, $metadataMap, $expectedResult, $exception = null) { $this->plugin->setMetadataMap($metadataMap); if ($exception) { $this->setExpectedException($exception['class'], $exception['message']); } if (is_callable($collection)) { $collection = $collection(); } $halCollection = $this->plugin->createCollection($collection); $result = $this->plugin->renderCollection($halCollection); $this->assertEquals($expectedResult, $result); }