gpt4 book ai didi

php - 监听 Symfony 2 中的所有事件

转载 作者:可可西里 更新时间:2023-11-01 13:21:18 25 4
gpt4 key购买 nike

是否可以设置一个事件监听器(或者做其他事情?)来监听 Symfony 2 AppKernel 应用程序针对特定请求触发的所有事件?

也就是说,我知道我可以使用 app_dev.php 浏览应用程序并使用分析器查看所有监听器的列表,但我感兴趣的是获取已发送/触发的每个事件的列表。我知道一些事件系统有一个特殊的全局/所有监听器,可以让我接收每个事件。我想知道 Symfony 是否有类似的东西,或者是否有另一种机制来获取特定页面上所有可用事件的列表。

我也知道我可以向其中一个事件调度程序类添加一些临时调试代码

Symfony/Component/EventDispatcher/EventDispatcher.php
Symfony/Component/HttpKernel/Debug/ContainerAwareTraceableEventDispatcher.php
Symfony/Component/EventDispatcher/ContainerAwareEventDispatcher.php

但我正在寻找不那么骇人听闻/破坏性较小的东西。

Symfony 新手,但不是编程新手。如果这是一个天真的问题,我们深表歉意,但谷歌搜索并没有揭示我在寻找什么。

最佳答案

最简单的方法是创建您自己的 EventDispatcher,它会执行您的日志记录或您在事件发生时尝试执行的任何操作。看看 default one了解其工作原理。

现在先创建类

use Symfony\Component\EventDispatcher\EventDispatcher;

class MyDispatcher extends EventDispatcher
{

// sadly those properties aren't protected in EventDispatcher
private $listeners = array();
private $sorted = array();


public function dispatch($eventName, Event $event = null)
{
if (null === $event) {
$event = new Event();
}

$event->setDispatcher($this);
$event->setName($eventName);

// do something with the event here ... i.e. log it

if (!isset($this->listeners[$eventName])) {
return $event;
}

$this->doDispatch($this->getListeners($eventName), $eventName, $event);

return $event;
}

... 然后将您的 MyDispatcher 注册为 symfony 的默认分配器。

(通过覆盖原来的 event_dispatcher 服务)

app/config/config.yml

services:
event_dispatcher:
class: Vendor\YourBundle\MyDispatcher
arguments: [@service_container]

...或者更简单的只是覆盖 class parameter在创建服务时由 symfony 使用。

parameters:
event_dispatcher.class: Vendor\YourBundle\MyDispatcher

关于php - 监听 Symfony 2 中的所有事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17302493/

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