2012-05-07 58 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>