在 Symfony3 中的每条路线/动作上执行功能

Pri*_*muS 2 symfony

我有一个跟踪页面加载的日志记录功能。我想将它添加到我在 Symfony 中已有的每条路线中。

目前我是这样做的:

/**
 * @Route("/test", name="test")
 */
public function testAction(Request $request)
{


    /* Function to register pageload */
    $this->get('statsd')->countMetric('visitor.'.$request->get('_route'));


    return $this->render('default/indexFull.html.twig', array());

}
Run Code Online (Sandbox Code Playgroud)

我当然可以将这条线添加到每条路线,但由于我是 Symfony 的新手,我认为可能有更优雅的方法?

任何提示表示赞赏!

Wou*_*r J 5

Symfony 在处理请求期间触发事件。这些事件之一是kernel.request事件,它在每个控制器之前执行。

请注意,路由器也会在此事件期间进行匹配,因此您需要确保您的侦听器路由器侦听器之后执行。这可以通过使用优先级来完成。

use Symfony\Component\HttpKernel\Event\GetResponseEvent;

class CountMetricLogger
{
    // ...

    public function logVisit(GetResponseEvent $event)
    {
        $this->statsd->countMetric('visitor.'.$event->getRequest()->get('_route'));
    }
}
Run Code Online (Sandbox Code Playgroud)
use Symfony\Component\HttpKernel\Event\GetResponseEvent;

class CountMetricLogger
{
    // ...

    public function logVisit(GetResponseEvent $event)
    {
        $this->statsd->countMetric('visitor.'.$event->getRequest()->get('_route'));
    }
}
Run Code Online (Sandbox Code Playgroud)

更多信息: