Какова цель тегов в настройках сервиса в symfony2
В этом сервисе для eventListener он использовал элемент tags:
services:
app.exception_listener:
class: AppBundle\EventListener\ExceptionListener
tags:
- { name: kernel.event_listener, event: kernel.exception }
- Какова цель элемента тегов?
- Как определить имя (name:kernel.event_listener) в этом элементе тегов?
1 ответ
Теги предоставляют атрибут name-key-value, который можно прикрепить к сервису. Сами по себе они ничего не делают, но другие сервисы могут использовать теги, чтобы сделать что-то более интересное.
В приведенном вами конкретном примере при создании контейнера проход компилятора для прослушивателя событий ищет службы с именем kernel.event_listener
и регистрирует эти службы в качестве прослушивателя событий для kernel.exception
событие.
Сами имена тегов нигде не определены; но если вы создадите CompilerPass
зарегистрированный в контейнере, вы можете искать сервисы, которые помечены определенным именем, и делать с ними что-то полезное. (Например, регистрация обработчиков событий, как описано выше.)
Дополнительную информацию о службах с тегами можно найти в документации по Symfony, включая пример простого CompilerPass
,