【问题标题】:Symfony2: Getting Route in Page Load Event ListenerSymfony2:在页面加载事件监听器中获取路由
【发布时间】:2012-07-15 08:36:12
【问题描述】:

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

我在 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

【问题讨论】:

    标签: php symfony


    【解决方案1】:

    所有内核事件都扩展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');
    }
    

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

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

    【讨论】:

    • 这是票,@gilden。 _route 和 _controller 已填充,唯一为空的是 _route_params 属性,尽管 Request 对象的 ParameterBag 似乎包含路由参数。我必须专门查询它,但它会起作用。你知道为什么 _route_params 不会出现吗?
    • 我看到对 _route_params 的引用已被引入 Symfony 2.1,看起来仍处于测试阶段。我正在使用稳定的 2.0.15,所以我会解决这个问题。再次感谢@gilden 为我指明了正确的方向。
    • @jbsound 抱歉,我一直忘记我正在为一个项目使用 2.1.*。您可以尝试var_dump-ing $request->attributes->all() - 属性也应该在 2.0.* 的参数包中。
    猜你喜欢
    • 2023-03-22
    • 2020-05-07
    • 1970-01-01
    • 2013-10-09
    • 2016-06-25
    • 2018-04-17
    • 1970-01-01
    • 2013-01-31
    • 2016-12-23
    相关资源
    最近更新 更多