用一个听众听多个事件?

Pro*_*tic 21 php events symfony

我正在Symfony2中构建一个具有社交驱动方面的应用程序(用户在网站上执行的许多操作将显示在"新闻提要"样式列表中供其他人查看).我已经确定sf2事件调度程序/侦听器系统是处理这个问题的最佳方法,但是我试图配置我的侦听器来处理许多不同的事件时遇到了一些麻烦.

我在搜索中发现的(现在过时的)文档似乎表明,在某一时刻,事件监听器可以注册多个事件,但代码已经重构,现在配置看起来像这样:

config.yml:

services:
  social.listener:
    class: F\Q\C\N\SocialEventListener
    tags:
      - { name: kernel.listener, event: onSocialShare }
Run Code Online (Sandbox Code Playgroud)

有没有办法:

  1. 轻松传递多个事件(类似于event: [onSocialShare, onSocialFriend, onSocialCreate]作品,但感觉它会很快变得丑陋和不可维护,可能会破坏我的配置文件,可能有数十个社交活动
  2. 定义我想从代码订阅的事件(如前所述)
  3. 或者可能是另一个我尚未想到的更好的选择

提前致谢.

Pro*_*tic 36

从symfony-users google group(此处的主题)回来的话是,通过添加几个标签来实现此目的的恰当方法是:

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 }
Run Code Online (Sandbox Code Playgroud)

所以,它看起来像目前,没有从侦听器代码添加事件订阅的好方法.那好吧.

  • 但这有利于在同一类中的每个事件之间共享状态,因此如果基于其他事件中的逻辑条件不合适,您至少可以提前退出给定事件。 (2认同)