2013-10-23 61 views
0

我有一個訂戶,實現了EventSubscriberInterface。然而,在Event dispatcher component documentation,據說訂閱一個事件,我應該打電話$dispatcher->addSubscriber()對象如何訂閱事件?

現在,對於我的例子,想象你有一個Mailer類,它訂閱了一些事件併發送電子郵件。我的基本問題是,我可以在哪裏添加到應用程序中,以便將此對象作爲應用程序範圍內的偵聽器添加?換句話說,在事件發生之前,我應該在哪裏調用$dispatcher->addSubscriber()

+1

使用「標籤'屬性在你的配置像這裏http://stackoverflow.com/questions/11771368/how-can-i-access-entity-manager-if-i-create-custom-event-in-symfony2 – Udan

回答

1

我重複自己一遍又一遍:

Dev的規則編號1(一):手冊頁是程序員最好的朋友

你需要知道的一切是正確的在這裏Symfony Docs中,部分中,您有興趣如下:

配置監聽/用戶現在

所創建的類,你只需要把它註冊爲服務,並通知Symfony的,它是在kernel.exception事件「監聽器」使用一種特殊的「標籤」: YAML

# app/config/config.yml 
services: 
    kernel.listener.your_listener_name: 
     class: Acme\DemoBundle\EventListener\AcmeExceptionListener 
     tags: 
      - { name: kernel.event_listener, event: kernel.exception, method: onKernelException } 
+0

如果我理解你的答案和文檔頁面都正確,這隻適用於Doctrin,而不是與數據庫無關的自定義事件。我的問題是關於這些類型的事件,而不是因爲與數據庫交互而發生的事件。 –

+0

事件是DI容器的一部分......無論事件發生在何處,以便在注入聽課時設置您使用'tag'屬性的聽衆/訂閱者 – Udan

+0

您能否編輯您的答案以更清楚地反映這一點對於那些後來發現我的問題的人?也許使用下面的鏈接,因爲它更通用,不僅僅基於Doctrin。非常感謝。鏈接是http://symfony.com/doc/current/cookbook/service_container/event_listener.html –