用一个听众听多个事件?

时间:2011-05-09 17:02:30

标签: php events symfony

我正在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. 或者可能是我还没想到的另一个更好的选择
  4. 提前致谢。

2 个答案:

答案 0 :(得分:34)

来自symfony-users google群组(线程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 :(得分:2)

我认为使用EventSubscriber会更容易 您可以定义要在该类中直接使用的事件

http://symfony.com/doc/current/cookbook/doctrine/event_listeners_subscribers.html