Прослушивание нескольких событий с одним слушателем?
Я создаю приложение в Symfony2, которое имеет социальный аспект (многие действия, которые пользователь выполняет на сайте, будут отображаться в списке "лента новостей" для просмотра другими). Я определил, что система диспетчера/прослушивателя событий sf2 - лучший способ справиться с этим, но я столкнулся с чем-то вроде того, что пытался настроить моего слушателя для обработки множества различных событий.
(теперь устаревшая) документация, найденная в моих поисках, кажется, указывает, что в какой-то момент слушатели событий могли регистрироваться на нескольких событиях, но код был реорганизован, и теперь конфигурация выглядит примерно так:
config.yml:
services:
social.listener:
class: F\Q\C\N\SocialEventListener
tags:
- { name: kernel.listener, event: onSocialShare }
Есть ли какой-либо способ:
- Легко передавать несколько событий (что-то вроде
event: [onSocialShare, onSocialFriend, onSocialCreate]
работает, но похоже, что он быстро станет уродливым и неподъемным, забив мой файл конфигурации потенциальными десятками социальных событий
- Определите событие, которое я хочу подписаться с кодом (как это было сделано ранее)
- Или, возможно, другой, лучший вариант, о котором я еще не думал.
Спасибо заранее.
Ответы
Ответ 1
Слово обратно из группы google-группы 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