Symfony中的事件侦听器与订户

mad*_*hur 1 php events symfony

我从文档中得知订阅者已经知道它应该订阅什么,但是现在我怀疑在定义侦听器时,我们会提供确切的事件来触发它

kernel.listener.my_listener:
    class: myBundle\EventListener\MyListener
    arguments:
        - @doctrine.orm.entity_manager
        - @twig
    tags:
        - { name: kernel.event_listener, event: kernel.request, method: myMethod}
Run Code Online (Sandbox Code Playgroud)

因此,侦听器完全知道何时触发,但是在订户的情况下,我们像这样注册

kernel.listener.my_listener:
    class: myBundle\EventListener\myListener
    arguments: ["@service_container"]
    tags:
    - { name: kernel.event_subscriber }
Run Code Online (Sandbox Code Playgroud)

现在,我的问题是订户如何知道何时触发或在每个事件上触发?

Ali*_*man 5

订户具有事件列表- getSubscribedEvents()方法。实际上,只有需要它的由EventSubscriberInterface标记的方法才定义一个类为事件订阅者。

它在启动期间(正在编译容器时)被调用,然后从订阅的事件构建侦听器。

使用事件订阅者