Symfony2 - 如何在Bundles之间注册全局事件监听器

时间:2012-05-07 20:22:28

标签: symfony

我有两个捆绑包:

  • SenderBundle
  • ReceiverBundle

首先做一些动作并发送一个事件,比方说,something.done。现在我想接收此事件并在ReceiverBundle中处理它,它包含分配给它的侦听器和正确的操作。我当然不想在SenderBundle中$eventDispatcher->addListener()!但是我想自动为已定义的事件注册监听器!

我想通过以下方式在ReceiverBundle中创建services.xml

<services>
    <service id="some_listener" class="My\ReceiverBundle\Class">
        <tag name="kernel.event_handler" event="something.done" method="onSomethingDone" />
    </service>
</services>

使用DependencyInjection自动加载。

我发现它有点像工作......但没有。我管理的内容 - 在发送事件后注册了Listener。为什么呢?!

我可以在Events中的调试工具栏中看到我的事件为“未调用侦听器”。我想这是因为在发送事件后启动并注册了Listener。

如何注册使用我的其他Bundle的Listener?它是以Doctrine(doctrine.event_listener)的某种方式制作的,但我无法弄清楚它是如何完成的。 :/

1 个答案:

答案 0 :(得分:0)

您想要使用kernel.event_listener标记:

<services>
    <service id="some_listener" class="My\ReceiverBundle\Class">
        <tag name="kernel.event_listener" event="something.done" method="onSomethingDone" />
    </service>
</services>