gpt4 book ai didi

symfony - 在 Symfony3 中的每条路线/ Action 上执行功能

转载 作者:行者123 更新时间:2023-12-02 09:28:59 26 4
gpt4 key购买 nike

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

目前我正在这样做:

/**
* @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 的新手,我认为可能有更优雅的方法?

任何提示表示赞赏!

最佳答案

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

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

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 }

更多信息:
  • "The kernel.request Event"
  • "The EventDispatcher component"
  • "How to Create Event Listeners and Subscribers"
  • 关于symfony - 在 Symfony3 中的每条路线/ Action 上执行功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35041779/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com