用一个侦听器侦听多个事件?

2022-08-30 19:05:15

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

提前致谢。


答案 1

从symfony用户谷歌组(线程这里)回来的单词是,这样做的适当方法是添加几个标签:

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 }

因此,看起来目前没有从侦听器代码添加事件订阅的好方法。哦,好吧。


答案 2

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

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


推荐