我有一个跟踪页面加载的日志记录功能。我想将它添加到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());
}
我当然可以在每条路线上添加该行,但由于我是Symfony的新手,我认为可能有更优雅的方法?
任何暗示都赞赏!
答案 0 :(得分:3)
Symfony在处理请求期间触发事件。其中一个事件是kernel.request
事件,它在每个控制器之前执行。
请注意,路由器也会在此事件期间进行匹配,因此您需要确保在路由器侦听器之后执行侦听器。这可以通过使用优先级来完成。
use Symfony\Component\HttpKernel\Event\GetResponseEvent;
class CountMetricLogger
{
// ...
public function logVisit(GetResponseEvent $event)
{
$this->statsd->countMetric('visitor.'.$event->getRequest()->get('_route'));
}
}
# app/config/services.yml
app.metric_logger:
class: AppBundle\EventListener\CountMetricLogger
arguments: ['@statsd']
tags:
- { name: kernel.event_listener, event: kernel.request, method: logVisit }
更多信息: