如何在Symfony2中查看可用事件列表

use*_*383 10 symfony

如何在Symfony2中查看所有可用事件?

我在谷歌上发现了一个命令

php app\console container:debug --show-private
Run Code Online (Sandbox Code Playgroud)

但它并未显示所有可用事件.像名为"security.interactive_login"的事件没有列在其中.有没有办法看到可用的事件?

Mar*_*Fox 28

控制台命令

你可以运行:

app/console debug:event-dispatcher
Run Code Online (Sandbox Code Playgroud)

这将按每个事件的优先级顺序向您显示每个订户的详细摘要.遗憾的是,这不会向您显示所有可能的事件,因为由于事件系统固有的动态特性而无法查询容器中可能注册的任何事件.

要了解事件,您需要引用每个组件和包的文档和代码.

文档是最好的起点

Symfony标准附带了大量活动.每个Symfony组件和包可能会或可能不会定义事件 - 您最好的选择是查看每个组件或包的文档以获取对事件的引用.

在文档中可以找到一些非常常见的事件:

代码分析

我使用PhpStorm来查找Symfony的基类Event类(Symfony\Component\EventDispatcher\Event)的所有子类.

我生成了一个继承树,每个子节点都是它父节点的子类.

*注意:预先添加Symfony\Component \以查找FQN

我并未声称这些都是您可以/应该加入的公开活动 - 这只是编程检查第三方代码并了解潜在习语的一种方式.

例如,我注意到HttpKernel,Security和Console组件都使用命名空间常量来公开它们的键,请参阅:


seb*_*bbo 2

container :debug命令显示注册到依赖项注入容器的所有服务。使用参数show-private ,它还将显示标记为public=false的服务。

因此,由于大多数事件可能不是服务,您使用的命令不会为您提供可用事件的列表。但为了让您能够搜索可用事件,您可以尝试以下命令:

php app/console container:debug --show-private | grep -i "listener"
Run Code Online (Sandbox Code Playgroud)

由于大多数事件处理程序的定义中可能都有“监听器”一词,因此您会发现其中很多。如果您想获取有关这些侦听器处理的事件的更详细信息,只需调用指定服务 ID 的命令即可。例如,如果您正在使用 FOSUserBundle,这将为您提供交互式登录侦听器的描述:

php app/console container:debug fos_user.security.interactive_login_listener
Run Code Online (Sandbox Code Playgroud)