如何在页面加载甚至监听器中获取路由?
我在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类中,我有相应的方法:
public function onKernelController(FilterControllerEvent $event)
{
// Some code I need to execute that needs the route arguments
}
问题似乎是路由和参数不可用。我错过了什么?
我需要传递哪个事件来接收路线及其参数?
谢谢,
JB
答案 0 :(得分:35)
所有内核事件都延伸KernelEvent
,这意味着您只需通过Request
访问$event->getRequest()
对象。
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');
}
如果您想获得普通路线属性,只需过滤掉前缀为“_”的所有元素。
选择要听的正确事件取决于您的具体用例。