/**
  * @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 testDoesNotRenderEmbeddedEntitiesInsideCollectionsBasedOnMetadataMapAndRenderEmbeddedEntitiesAsFalse()
 {
     $entity = new TestAsset\Entity('spock', 'Spock');
     $entity->first_child = new TestAsset\EmbeddedEntity('bar', 'Bar');
     $entity->second_child = new TestAsset\EmbeddedEntityWithCustomIdentifier('baz', 'Baz');
     $metadata = new MetadataMap(['ZFTest\\JsonLD\\Plugin\\TestAsset\\EmbeddedEntity' => ['hydrator' => 'Zend\\Hydrator\\ObjectProperty', 'route' => 'hostname/embedded'], 'ZFTest\\JsonLD\\Plugin\\TestAsset\\EmbeddedEntityWithCustomIdentifier' => ['hydrator' => 'Zend\\Hydrator\\ObjectProperty', 'route' => 'hostname/embedded_custom', 'route_identifier_name' => 'custom_id', 'entity_identifier_name' => 'custom_id'], 'ZFTest\\JsonLD\\Plugin\\TestAsset\\Collection' => ['is_collection' => true, 'route' => 'hostname/contacts', 'entity_route' => 'hostname/embedded'], 'ZFTest\\JsonLD\\Plugin\\TestAsset\\Entity' => ['hydrator' => 'Zend\\Hydrator\\ObjectProperty', 'route_name' => 'hostname/resource']]);
     $this->plugin->setMetadataMap($metadata);
     $this->plugin->setRenderEmbeddedEntities(false);
     $collection = new Collection([$entity], 'hostname/resource');
     $self = new Property('id');
     $self->setRoute('hostname/resource');
     $collection->getProperties()->add($self);
     $collection->setCollectionName('resources');
     $rendered = $this->plugin->renderCollection($collection);
     $this->assertRelationalPropertyContains('/resource', 'id', $rendered);
     $this->assertArrayHasKey('resources', $rendered);
     $embed = $rendered['resources'];
     $this->assertInternalType('array', $embed);
     $this->assertEquals(1, count($embed));
     $resource = array_shift($embed);
     $this->assertInternalType('array', $resource);
     $this->assertArrayHasKey('first_child', $resource);
     $this->assertArrayHasKey('second_child', $resource);
     $this->assertInternalType('array', $resource['first_child']);
     $this->assertArrayHasKey('id', $resource['first_child']);
     $this->assertInternalType('array', $resource['second_child']);
     $this->assertArrayHasKey('id', $resource['second_child']);
 }