2011-05-09 68 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