/**
  * @param  ServiceLocatorInterface $serviceLocator
  * @return Plugin\JsonLD
  */
 public function createService(ServiceLocatorInterface $serviceLocator)
 {
     $services = $serviceLocator->getServiceLocator();
     $jsonLDConfig = $services->get('ZF\\JsonLD\\JsonLDConfig');
     /* @var $rendererOptions \ZF\JsonLD\RendererOptions */
     $rendererOptions = $services->get('ZF\\JsonLD\\RendererOptions');
     $metadataMap = $services->get('ZF\\JsonLD\\MetadataMap');
     $hydrators = $metadataMap->getHydratorManager();
     $serverUrlHelper = $serviceLocator->get('ServerUrl');
     if (isset($jsonLDConfig['options']['use_proxy'])) {
         $serverUrlHelper->setUseProxy($jsonLDConfig['options']['use_proxy']);
     }
     $urlHelper = $serviceLocator->get('Url');
     $helper = new Plugin\JsonLD($hydrators);
     $helper->setMetadataMap($metadataMap)->setServerUrlHelper($serverUrlHelper)->setUrlHelper($urlHelper);
     $propertyExtractor = new PropertyExtractor($serverUrlHelper, $urlHelper);
     $propertyCollectionExtractor = new PropertyCollectionExtractor($propertyExtractor);
     $helper->setPropertyCollectionExtractor($propertyCollectionExtractor);
     $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->getRenderMemberEntities());
     $helper->setRenderCollections($rendererOptions->getRenderMemberCollections());
     $hydratorMap = $rendererOptions->getHydrators();
     foreach ($hydratorMap as $class => $hydratorServiceName) {
         $helper->addHydrator($class, $hydratorServiceName);
     }
     return $helper;
 }
Exemplo n.º 2
0
 public function testUsesDefaultHydratorIfAvailable()
 {
     $this->plugin->setDefaultHydrator(new Hydrator\ArraySerializable());
     $item = new JsonLDTestAsset\ArraySerializable();
     $item = new Entity(new JsonLDTestAsset\ArraySerializable(), 'identifier');
     $properties = $item->getProperties();
     $self = new Property('id');
     $self->setRoute('resource')->setRouteParams(['id' => 'identifier']);
     $properties->add($self);
     $result = $this->plugin->renderEntity($item);
     $this->assertPropertyEquals('http://localhost.localdomain/resource/identifier', 'id', $result);
     $this->assertArrayHasKey('foo', $result);
     $this->assertEquals('bar', $result['foo']);
 }