2013-05-13 25 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>'); 
}