2012-05-07 60 views
0

之间的全球事件侦听器我有两个软件包:Symfony2的 - 如何注册捆绑

  • 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在事件发送后注册。为什么?!

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

如何注册Listener与我的其他软件包一起工作?它在Doctrine(doctrine.event_listener)中以某种方式制作,但我无法弄清楚它是如何完成的。 :/

回答

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>