2013-05-13 2 views
0

사용자를 특정 언어로 리디렉션하기 위해 kernel listener some time ago을 빌드합니다.커널 수신기의 라우팅 라우팅 옵션

번역이없고 사용자가 리디렉션되지 않아야하는 페이지가 여러 개 있습니다. JMSI18nRoutingBundle을 사용할 때 번들에서 'options : {i18n : false}'설정을 사용하는 것이 가장 좋은 방법이라고 생각했습니다.

커널 수신기의 현재 경로 옵션을 읽을 수 있어야합니다. 가능한가요?

답변

3

경로 옵션을 먼저 얻으려면 경로 수집을 얻어야하며 경로 수집에서 경로 이름에 따라 경로 개체를 얻어야합니다.

그러면 청취자는 라우터에 의존하게됩니다. 당신의 생성자는 이것을 어떻게 보일 것입니다.

/** 
* @var $routeCollection \Symfony\Component\Routing\RouteCollection 
*/ 
private $_routeCollection; 

function __construct(\Symfony\Bundle\FrameworkBundle\Routing\Router $router) 
{ 
    $this->_routeCollection = $router->getRouteCollection(); 
} 

이제 수신기 메서드 내에서 현재 경로 이름을 얻기 위해 요청 개체가 필요합니다. 예를 들어 수신기 메소드가 onKernelController() 인 경우

function onKernelController(FilterControllerEvent $event) 
{ 
    /** 
    * @var $route \Symfony\Component\Routing\Route 
    */ 
    $route = $this->_routeCollection->get($event->getRequest()->get('_route')); 

    // @var $allOptions will have all the options for current route. 
    $allOptions = $route->getOptions(); 

    // To get specific option you can use getOption() 
    $someSpecificOption = $route->getOption('<key>'); 
}