/**
  * @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'));
 }