Symfony2:在页面加载事件监听器中获取路由

jbs*_*und 13 php symfony

如何在页面加载甚至监听器中获取路由?

我在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 }
Run Code Online (Sandbox Code Playgroud)

在PageLoadListener类中,我有相应的方法:

    public function onKernelController(FilterControllerEvent $event)
    {

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

    }
Run Code Online (Sandbox Code Playgroud)

问题似乎是路由和参数不可用.我错过了什么?

我需要通过哪个事件来获取路线及其参数?

谢谢,

JB

gil*_*den 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');
}
Run Code Online (Sandbox Code Playgroud)

如果您想获得普通路由属性,只需过滤掉前缀为"_"的所有元素.

选择要听的正确事件取决于您的具体用例.