/**
     * @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;
 }
Exemple #4
0
 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']);
 }