public function setUp() { $routerClass = class_exists(V2TreeRouteStack::class) ? V2TreeRouteStack::class : TreeRouteStack::class; $routeClass = class_exists(V2Segment::class) ? V2Segment::class : Segment::class; $this->router = $router = new $routerClass(); $route = new $routeClass('/resource[/[:id]]'); $router->addRoute('resource', $route); $route2 = new $routeClass('/help'); $router->addRoute('docs', $route2); $router->addRoute('hostname', ['type' => 'hostname', 'options' => ['route' => 'localhost.localdomain'], 'child_routes' => ['resource' => ['type' => 'segment', 'options' => ['route' => '/resource[/:id]'], 'may_terminate' => true, 'child_routes' => ['children' => ['type' => 'literal', 'options' => ['route' => '/children']]]], 'users' => ['type' => 'segment', 'options' => ['route' => '/users[/:id]']], 'contacts' => ['type' => 'segment', 'options' => ['route' => '/contacts[/:id]']], 'embedded' => ['type' => 'segment', 'options' => ['route' => '/embedded[/:id]']], 'embedded_custom' => ['type' => 'segment', 'options' => ['route' => '/embedded_custom[/:custom_id]']]]]); $this->event = $event = new MvcEvent(); $event->setRouter($router); $router->setRequestUri(new Http('http://localhost.localdomain/resource')); $controller = $this->controller = $this->prophesize(AbstractRestfulController::class); $controller->getEvent()->willReturn($event); $this->urlHelper = $urlHelper = new UrlHelper(); $urlHelper->setRouter($router); $this->serverUrlHelper = $serverUrlHelper = new ServerUrlHelper(); $serverUrlHelper->setScheme('http'); $serverUrlHelper->setHost('localhost.localdomain'); $this->plugin = $plugin = new HalHelper(); $plugin->setController($controller->reveal()); $linkUrlBuilder = new LinkUrlBuilder($serverUrlHelper, $urlHelper); $plugin->setLinkUrlBuilder($linkUrlBuilder); $linkExtractor = new LinkExtractor($linkUrlBuilder); $linkCollectionExtractor = new LinkCollectionExtractor($linkExtractor); $plugin->setLinkCollectionExtractor($linkCollectionExtractor); }
/** * @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; }
public function setupHelpers() { if (!$this->router) { $this->setupRouter(); } $urlHelper = new UrlHelper(); $urlHelper->setRouter($this->router); $serverUrlHelper = new ServerUrlHelper(); $serverUrlHelper->setScheme('http'); $serverUrlHelper->setHost('localhost.localdomain'); $linkUrlBuilder = new LinkUrlBuilder($serverUrlHelper, $urlHelper); $linksHelper = new HalHelper(); $linksHelper->setLinkUrlBuilder($linkUrlBuilder); $linkExtractor = new LinkExtractor($linkUrlBuilder); $linkCollectionExtractor = new LinkCollectionExtractor($linkExtractor); $linksHelper->setLinkCollectionExtractor($linkCollectionExtractor); $this->helpers = $helpers = new HelperPluginManager(new ServiceManager()); $helpers->setService('url', $urlHelper); $helpers->setService('serverUrl', $serverUrlHelper); $helpers->setService('Hal', $linksHelper); $this->plugins = $plugins = new ControllerPluginManager(new ServiceManager()); $plugins->setService('Hal', $linksHelper); }