如何在Symfony2中查看所有可用事件?
我在谷歌上找到了一个命令
php app\console container:debug --show-private
但它没有显示所有可用的事件。像名为“security.interactive_login”的事件没有列在其中。 有没有办法看到可用的事件?
答案 0 :(得分:27)
你可以运行:
app/console debug:event-dispatcher
这将按优先顺序显示每个订阅者的详细摘要。很遗憾,这不会向您显示所有可能的事件,因为它不可行查询容器以查找由于事件系统本身具有动态特性而可以注册的任何事件。
要了解您需要引用每个组件和包的文档和代码的事件。
Symfony标准附带了大量活动。每个Symfony组件和捆绑包可能会也可能不会定义事件 - 您最好的选择是查看每个组件或捆绑包的文档以获取对事件的引用。
在文档中可以找到一些非常常见的事件:
我使用PhpStorm查找Symfony的基类Event类(Symfony\Component\EventDispatcher\Event
)的所有子类。
我生成了一个继承树,每个子节点都是它父节点的子类。
*注意:前置 Symfony\Component\ 以查找FQN
我并未声称这些都是您可以/应该加入的公开活动 - 这只是编程检查第三方代码并了解潜在习语的一种方式。
例如,我注意到HttpKernel,Security和Console组件都使用命名空间常量来公开其键,请参阅:
答案 1 :(得分:2)
container:debug 命令显示注册到依赖项注入容器的所有服务。使用参数 show-private ,它还将显示标有 public = false 的服务。
因为大多数事件可能不是服务,所以您使用的命令不会为您提供可用事件列表。但是为了让您可以搜索可用的事件,可以尝试以下命令:
php app/console container:debug --show-private | grep -i "listener"
由于大多数事件处理程序可能在其定义中包含单词listener,因此您会发现其中的许多内容。如果您希望获得有关这些侦听器处理的事件的更详细信息,只需通过指定服务ID调用该命令即可。例如,如果您正在使用FOSUserBundle,这将为您提供交互式登录侦听器的说明:
php app/console container:debug fos_user.security.interactive_login_listener