Как добавить собственные пользовательские теги контейнера сервиса и как получить помеченные сервисы в symfony2?

#php #symfony

#php #symfony

Вопрос:

Теперь я могу помечать сервисы, например: form.type witch сообщает компоненту forms использовать этот сервис в качестве типа формы.

Я не могу найти никакой документации по этому вопросу, как я могу определить свой собственный тег? И получить все сервисы, которые помечены этим? Или даже передать все помеченные моим тегом сервисы в качестве аргумента другому сервису?

Ответ №1:

Хорошо, я нашел ответ, в основном теги обрабатываются классами, которые реализуют CompilerPassInterface переданные компилятором объекты, которые могут быть добавлены в файл bunlde (например: SymfonyBundleFrameworkBundleFrameworkBundle см. Метод build )

У CompilerPass есть метод, который process witch получает ContainerBuilder в качестве аргумента.
У ContainerBuilder есть метод: findTaggedServiceIds , который можно использовать для получения идентификаторов помеченных сервисов и делать с ними все, что вы хотите.

Чтобы передать результаты другому сервису, вы должны определить для него пустой аргумент collection и с помощью ContainerBuilder заменить этот аргумент найденными идентификаторами сервисов.

например: SymfonyBundleFrameworkBundleDependencyInjectionCompilerFormPass

Комментарии:

1. Спасибо, что поделились ответом. Но зачем вам это было нужно? Я никогда не использовал это