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