/** * @param GetResponseEvent $event */ public function onKernelRequest(GetResponseEvent $event) { if (!$event->isMasterRequest()) { return; } $request = $event->getRequest(); if (false === strpos($request->headers->get('accept'), 'text/html')) { return; } $pageEntity = $this->pageManager->getPageByRequest($request); if (!$pageEntity instanceof OneHydraPageInterface) { return; } $page = $pageEntity->getPageObject(); $redirectCode = $page->getRedirectCode(); $redirectUrl = $page->getRedirectUrl(); $hasRedirectCode = in_array($redirectCode, [301, 302]); $hasRedirectUrl = strlen($redirectUrl) > 0; if ($hasRedirectCode && $hasRedirectUrl) { $event->setResponse(new RedirectResponse($redirectUrl, $redirectCode)); } }
/** * @param string $key * @param string $defaultValue * @param Request $request * @return string */ public function getOneHydraHeadContent($key, $defaultValue, $request = null) { if (is_null($request)) { $request = $this->requestStack->getCurrentRequest(); } if (is_null($request)) { // We still have no request, so we cannot look up the page return false; } if ($page = $this->pageManager->getPageByRequest($request)) { if ($pageObject = $page->getPageObject()) { $methodName = 'get' . ucwords(strtolower($key)); if (method_exists($pageObject, $methodName)) { $value = $pageObject->{$methodName}(); return !is_null($value) ? $value : $defaultValue; } } } return $defaultValue; }
public function testGetPageByRequestWithAttributesAlready() { $programId = 'foo'; $pageName = '/foo'; $request = Request::create('/foo/bar'); $request->attributes->set('_one_hydra_name', $pageName); $request->attributes->set('_one_hydra_program', $programId); $pageEntity = $this->prophesize(OneHydraPageInterface::class); $pageStorage = $this->prophesize(PageStorageInterface::class); // Should be called just once because of the local cache! $pageStorage->getPageEntity($pageName, $programId)->willReturn($pageEntity)->shouldBeCalledTimes(1); $pageTransformStrategy = $this->prophesize(PageTransformStrategyInterface::class); $pageTransformStrategy->getLookupProgramId($request)->shouldNotBeCalled(); $pageTransformStrategy->getLookupPageName($request)->shouldNotBeCalled(); $pageManager = new PageManager(); $pageManager->setPageStorage($pageStorage->reveal()); $pageManager->setPageTransformStrategy($pageTransformStrategy->reveal()); $actualPageEntity1 = $pageManager->getPageByRequest($request); $actualPageEntity2 = $pageManager->getPageByRequest($request); $this->assertEquals($pageEntity->reveal(), $actualPageEntity1); $this->assertEquals($pageEntity->reveal(), $actualPageEntity2); $this->assertEquals($pageName, $request->attributes->get('_one_hydra_name')); $this->assertEquals($programId, $request->attributes->get('_one_hydra_program')); }