2016-01-26 73 views
0

在這種服務中服務設置標籤的目標,一個事件監聽,它使用了標籤項目:什麼是Symfony2的

services: 
    app.exception_listener: 
     class: AppBundle\EventListener\ExceptionListener 
     tags: 
      - { name: kernel.event_listener, event: kernel.exception } 
  1. 什麼是標籤項目的目標是什麼?
  2. 如何將名稱(名稱:kernel.event_listener)定義到此標籤項目中?
+1

http://symfony.com/doc/current/components/dependency_injection/tags.html – Cerad

回答

4

標記提供了可以附加到服務的名稱鍵值屬性。他們自己不做任何事情,但其他服務可以利用標籤來做更有趣的事情。

在您給出的特定示例中,在構建容器時,事件偵聽器的編譯器傳遞查找名稱爲kernel.event_listener的服務,並將該服務註冊爲kernel.exception事件的事件偵聽器。

標籤名稱本身沒有在任何地方定義;但是如果您創建了在容器中註冊的CompilerPass,則可以搜索標有特定名稱的服務並對它們執行一些有用的操作。 (例如註冊事件處理程序,如上所述)。

您可以從Symfony documentation找到更多關於標記服務的信息,包括簡單CompilerPass的示例。

+0

非常感謝。 CompilerPass中的process()方法使用標記名稱中的值,通過使用findTaggedServiceIds(value)方法查找所有標記了它的服務。 –

相關問題