2011-05-09 64 views
17

我在Symfony2中構建了一個具有社交驅動方面的應用(用戶在網站上執行的許多操作將顯示在「新聞饋送」風格的列表中供其他人查看)。我已經確定sf2事件調度程序/監聽程序系統是處理這個問題的最佳方法,但是我試圖配置我的監聽程序來處理許多不同的事件時遇到了一些障礙。用一個聽衆收聽多個事件?

我在我的搜索中找到的(現在過時的)文檔似乎表明,在某一時刻,事件監聽器可以註冊多個事件,但代碼已被重構,現在配置看起來像這樣:

config.yml:

services: 
    social.listener: 
    class: F\Q\C\N\SocialEventListener 
    tags: 
     - { name: kernel.listener, event: onSocialShare } 

有什麼辦法要麼:

  1. 很容易地通過多重事件(像event: [onSocialShare, onSocialFriend, onSocialCreate]級的作品,但感覺就像它會很快得到醜陋,難以維護,堵塞了我的配置文件具有潛在的幾十個社會事件的
  2. 定義,而我想從代碼訂閱事件(如以前做過)
  3. 或者可能是另一個,我還沒有想到的更好的選項

在此先感謝。

回答

29

字從symfony的用戶谷歌組回(線程here)是合適的方式做,這是通過添加幾個標籤:

services: 
    social.listener: 
    class: F\Q\C\N\SocialEventListener 
    tags: 
     - { name: kernel.listener, event: onSocialShare } 
     - { name: kernel.listener, event: onSocialFriend } 
     - { name: kernel.listener, event: ... etc } 

所以,它看起來像現在,有沒有什麼好辦法從偵聽器代碼添加事件訂閱。好吧。

+1

使用事件,但是這是件好事在同每個這些事件之間的共享狀態類,所以如果條件不合適,可以至少從給定事件中退出,這是基於其他事件中的邏輯。 – 2013-05-23 19:17:08