прослушивание нескольких событий с одним слушателем? - PullRequest
20 голосов
/ 09 мая 2011

Я создаю приложение в 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. Или, возможно, другой, лучший вариант, о котором я еще не думал

Заранее спасибо.

Ответы [ 2 ]

34 голосов
/ 10 мая 2011

Вернемся из группы Google Symfony-users (тема здесь ): для этого нужно добавить несколько тегов:

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 голосов
/ 30 мая 2014

Я думаю, что будет легче использовать EventSubscriber, Вы можете определить события, которые вы хотите использовать непосредственно в этом классе

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...