Symfony 4 _instanceof в услугах Bundle.yaml - PullRequest
0 голосов
/ 04 июля 2018

У меня есть пакет с интерфейсом Optimax\HealthCheckBundle\Service\HealthInterface Мне нужно установить теги для всех служб, которые реализуют этот интерфейс. Я делаю это с помощью следующей директивы:

_instanceof:
  Optimax\HealthCheckBundle\Service\HealthInterface:
    tags: ['health.service']

Это прекрасно работает, когда я помещаю эту директиву в config/services.yaml. Но если я добавлю этот код в конфигурацию моего пакета (что требуется через composer) vendor/optimax/health-check/src/Resources/config/services.yaml, он не будет работать. Я не хочу копировать и вставлять эту директиву в services.yaml каждый раз, когда мне требуется этот пакет для нового проекта.

Как я могу переместить эту директиву в services.yaml, который находится в каталоге моего пакета или, по крайней мере, в другой файл в папке config/packages проекта?

Ответы [ 2 ]

0 голосов
/ 24 января 2019

Чтобы расширить этот вопрос для других.

_instanceof функционирует идентично определению _defaults. При этом определение _instanceof относится только к файлу, в котором оно используется.

Это предотвращает влияние сторонних определений комплектов на все приложение, например:

_defaults: 
    public: true
    autowire: false

_instanceof:
    Psr\Log\LoggerAwareInterface:
        - method: setLogger
          arguments:
              - '@custom_logger'
        tags:
            - { name: monologer.log, channel: 'custom_channel' }

Поэтому, если служба, которую вы пытаетесь пометить _instanceof, не объявлена ​​в том же файле services.yml, тег не будет добавлен.

Чтобы пометить службы, которые реализуют Интерфейс во всем приложении, вам нужно будет использовать метод , предоставленный @ Jeroen

0 голосов
/ 04 июля 2018

Вы пытались автоматически пометить все сервисы с этим интерфейсом в своем расширении Bundle следующим образом:

$container->registerForAutoconfiguration(CustomInterface::class)
     ->addTag('app.custom_tag')
;

Взято из документов Symfony: https://symfony.com/doc/current/service_container/tags.html

...