eZ\Bundle\EzPublishCoreBundle\EventListener\SiteAccessListener::onSiteAccessMatch PHP Method

onSiteAccessMatch() public method

public onSiteAccessMatch ( PostSiteAccessMatchEvent $event )
$event eZ\Publish\Core\MVC\Symfony\Event\PostSiteAccessMatchEvent
    public function onSiteAccessMatch(PostSiteAccessMatchEvent $event)
    {
        $request = $event->getRequest();
        $matchedSiteAccess = $event->getSiteAccess();
        $siteAccess = $this->container->get('ezpublish.siteaccess');
        $siteAccess->name = $matchedSiteAccess->name;
        $siteAccess->matchingType = $matchedSiteAccess->matchingType;
        $siteAccess->matcher = $matchedSiteAccess->matcher;
        // We already have semanticPathinfo (sub-request)
        if ($request->attributes->has('semanticPathinfo')) {
            $vpString = $request->attributes->get('viewParametersString');
            if (!empty($vpString)) {
                $request->attributes->set('viewParameters', $this->generateViewParametersArray($vpString));
            } else {
                $request->attributes->set('viewParametersString', '');
                $request->attributes->set('viewParameters', array());
            }
            return;
        }
        // Analyse the pathinfo if needed since it might contain the siteaccess (i.e. like in URI mode)
        $pathinfo = rawurldecode($request->getPathInfo());
        if ($siteAccess->matcher instanceof URILexer) {
            $semanticPathinfo = $siteAccess->matcher->analyseURI($pathinfo);
        } else {
            $semanticPathinfo = $pathinfo;
        }
        // Get view parameters and cleaned up pathinfo (without view parameters string)
        list($semanticPathinfo, $viewParameters, $viewParametersString) = $this->getViewParameters($semanticPathinfo);
        // Storing the modified pathinfo in 'semanticPathinfo' request attribute, to keep a trace of it.
        // Routers implementing RequestMatcherInterface should thus use this attribute instead of the original pathinfo
        $request->attributes->set('semanticPathinfo', $semanticPathinfo);
        $request->attributes->set('viewParameters', $viewParameters);
        $request->attributes->set('viewParametersString', $viewParametersString);
    }

Usage Example

 /**
  * @dataProvider siteAccessMatchProvider
  */
 public function testOnSiteAccessMatchSubRequest($uri, $semanticPathinfo, $vpString, $expectedViewParameters)
 {
     $siteAccess = new SiteAccess('test', 'test', $this->getMock('eZ\\Publish\\Core\\MVC\\Symfony\\SiteAccess\\Matcher'));
     $request = Request::create($uri);
     $request->attributes->set('semanticPathinfo', $semanticPathinfo);
     if (!empty($vpString)) {
         $request->attributes->set('viewParametersString', $vpString);
     }
     $event = new PostSiteAccessMatchEvent($siteAccess, $request, HttpKernelInterface::SUB_REQUEST);
     $this->container->expects($this->once())->method('set')->with('ezpublish.siteaccess', $siteAccess);
     $this->listener->onSiteAccessMatch($event);
     $this->assertSame($semanticPathinfo, $request->attributes->get('semanticPathinfo'));
     $this->assertSame($expectedViewParameters, $request->attributes->get('viewParameters'));
     $this->assertSame($vpString, $request->attributes->get('viewParametersString'));
 }