#php #symfony
#php #symfony
Вопрос:
Теперь я могу помечать сервисы, например: form.type
witch сообщает компоненту forms использовать этот сервис в качестве типа формы.
Я не могу найти никакой документации по этому вопросу, как я могу определить свой собственный тег? И получить все сервисы, которые помечены этим? Или даже передать все помеченные моим тегом сервисы в качестве аргумента другому сервису?
Ответ №1:
Хорошо, я нашел ответ, в основном теги обрабатываются классами, которые реализуют CompilerPassInterface
переданные компилятором объекты, которые могут быть добавлены в файл bunlde (например: SymfonyBundleFrameworkBundleFrameworkBundle
см. Метод build
)
У CompilerPass есть метод, который process
witch получает ContainerBuilder
в качестве аргумента.
У ContainerBuilder есть метод: findTaggedServiceIds
, который можно использовать для получения идентификаторов помеченных сервисов и делать с ними все, что вы хотите.
Чтобы передать результаты другому сервису, вы должны определить для него пустой аргумент collection и с помощью ContainerBuilder заменить этот аргумент найденными идентификаторами сервисов.
например: SymfonyBundleFrameworkBundleDependencyInjectionCompilerFormPass
Комментарии:
1. Спасибо, что поделились ответом. Но зачем вам это было нужно? Я никогда не использовал это