eZ\Publish\Core\MVC\Symfony\EventListener\SiteAccessMatchListener::onKernelRequest PHP Method

onKernelRequest() public method

public onKernelRequest ( GetResponseEvent $event )
$event Symfony\Component\HttpKernel\Event\GetResponseEvent
    public function onKernelRequest(GetResponseEvent $event)
    {
        $request = $event->getRequest();
        // Don't try to match when it's a user hash request. SiteAccess is irrelevant in this case.
        if ($this->userContextRequestMatcher->matches($request) && !$request->attributes->has('_ez_original_request')) {
            return;
        }
        // We have a serialized siteaccess object from a fragment (sub-request), we need to get it back.
        if ($request->attributes->has('serialized_siteaccess')) {
            $request->attributes->set('siteaccess', unserialize($request->attributes->get('serialized_siteaccess')));
            $request->attributes->remove('serialized_siteaccess');
        } elseif (!$request->attributes->has('siteaccess')) {
            // Get SiteAccess from original request if present ("_ez_original_request" attribute), or current request otherwise.
            // "_ez_original_request" attribute is present in the case of user context hash generation (aka "user hash request").
            $request->attributes->set('siteaccess', $this->getSiteAccessFromRequest($request->attributes->get('_ez_original_request', $request)));
        }
        $siteaccess = $request->attributes->get('siteaccess');
        if ($siteaccess instanceof SiteAccess) {
            $siteAccessEvent = new PostSiteAccessMatchEvent($siteaccess, $request, $event->getRequestType());
            $this->eventDispatcher->dispatch(MVCEvents::SITEACCESS, $siteAccessEvent);
        }
    }

Usage Example

 public function testOnKernelRequestUserHashWithOriginalRequest()
 {
     $siteAccess = new SiteAccess();
     $scheme = 'https';
     $host = 'phoenix-rises.fm';
     $port = 1234;
     $path = '/foo/bar';
     $originalRequest = Request::create(sprintf('%s://%s:%d%s', $scheme, $host, $port, $path));
     $request = Request::create('http://localhost/_fos_user_hash');
     $request->attributes->set('_ez_original_request', $originalRequest);
     $event = new GetResponseEvent($this->getMock('\\Symfony\\Component\\HttpKernel\\HttpKernelInterface'), $request, HttpKernelInterface::MASTER_REQUEST);
     $this->userHashMatcher->expects($this->once())->method('matches')->with($request)->will($this->returnValue(true));
     $simplifiedRequest = new SimplifiedRequest(array('scheme' => $originalRequest->getScheme(), 'host' => $originalRequest->getHost(), 'port' => $originalRequest->getPort(), 'pathinfo' => $originalRequest->getPathInfo(), 'queryParams' => $originalRequest->query->all(), 'languages' => $originalRequest->getLanguages(), 'headers' => $originalRequest->headers->all()));
     $this->saRouter->expects($this->once())->method('match')->with($this->equalTo($simplifiedRequest))->will($this->returnValue($siteAccess));
     $postSAMatchEvent = new PostSiteAccessMatchEvent($siteAccess, $request, $event->getRequestType());
     $this->eventDispatcher->expects($this->once())->method('dispatch')->with(MVCEvents::SITEACCESS, $this->equalTo($postSAMatchEvent));
     $this->listener->onKernelRequest($event);
     $this->assertSame($siteAccess, $request->attributes->get('siteaccess'));
 }