2012-07-16 106 views
12

如何在頁面加載連接監聽器中獲取路由?Symfony2:在頁面加載事件監聽器中獲取路由

我在services.yml以下代碼:

page_load_listener: 
    class: Acme\MainBundle\EventListener\PageLoadListener 
    arguments: [@security.context, @session] 
    tags: 
     - { name: kernel.event_listener, event: kernel.controller, method: onKernelController, priority: 64 } 

在PageLoadListener I類有相應的方法:

public function onKernelController(FilterControllerEvent $event) 
    { 

     // Some code I need to execute that needs the route arguments 

    } 

這個問題似乎是路線和論據並不可用。我錯過了什麼?

我需要通過哪個事件來提取路線,它是參數?

感謝,

JB

回答

30

所有核活動延長KernelEvent,這意味着你可以通過簡單的接取$event->getRequest()Request對象。

public function onKernelController(FilterControllerEvent $event) 
{ 
    $request = $event->getRequest(); 

    // Matched route 
    $_route = $request->attributes->get('_route'); 

    // Matched controller 
    $_controller = $request->attributes->get('_controller'); 

    // All route parameters including the `_controller` 
    $params  = $request->attributes->get('_route_params'); 
} 

如果您想獲得普通路由屬性,只需過濾掉所有以「_」開頭的元素。

選擇合適的事件聽取取決於您的具體用例。

+0

這就是票據@gilden。 _route和_controller被填充,唯一空的是_route_params屬性,雖然Request對象的ParameterBag似乎包含路由參數。我不得不專門查詢它,但它會起作用。你會不會知道爲什麼_route_params不會出現? – jbsound 2012-07-16 16:04:36

+0

我看到引用了Symfony 2.1的_route_params引用,它看起來仍然處於測試階段。我使用穩定的2.0.15,所以我會解決這個問題。再次感謝我指出我正確的方向@gilden。 – jbsound 2012-07-16 16:12:57

+0

@jbsound對不起,我一直忘記我正在使用2.1。*爲一個項目。您可以嘗試'var_dump' -'$ request-> attributes-> all()' - 這些屬性也應該在2.0。*的參數包中。 – gilden 2012-07-16 16:15:11