Какова цель тегов в настройках сервиса в symfony2

В этом сервисе для eventListener он использовал элемент tags:

services:
    app.exception_listener:
        class: AppBundle\EventListener\ExceptionListener
        tags:
            - { name: kernel.event_listener, event: kernel.exception }
  1. Какова цель элемента тегов?
  2. Как определить имя (name:kernel.event_listener) в этом элементе тегов?

1 ответ

Решение

Теги предоставляют атрибут name-key-value, который можно прикрепить к сервису. Сами по себе они ничего не делают, но другие сервисы могут использовать теги, чтобы сделать что-то более интересное.

В приведенном вами конкретном примере при создании контейнера проход компилятора для прослушивателя событий ищет службы с именем kernel.event_listener и регистрирует эти службы в качестве прослушивателя событий для kernel.exception событие.

Сами имена тегов нигде не определены; но если вы создадите CompilerPass зарегистрированный в контейнере, вы можете искать сервисы, которые помечены определенным именем, и делать с ними что-то полезное. (Например, регистрация обработчиков событий, как описано выше.)

Дополнительную информацию о службах с тегами можно найти в документации по Symfony, включая пример простого CompilerPass,

Другие вопросы по тегам