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

Я пометил группу служб, которые реализуют такой же интерфейс в моей конфигурации:

// services.yml
services:
  _instanceof:
     App\SomeInterface:
       tags: [ !php/const App\SomeInterface::TAG ]

(Где значение для App\SomeInterface::TAG является very_unique_identifier)

Я хотел бы повторно использовать это значение для привязки этого параметра следующим образом:

// services.yaml
 services:
  _defaults:
    autowire: true      
    autoconfigure: true 
    public: false
    bind:
      $fooStrategies: !tagged !php/const App\SomeInterface::TAG 

Но когда я так делаю, я получаю пустой RewindableGenerator.

Вместо этого я могу сделать это так, используя буквальное значение константы:

bind:
      $fooStrategies: !tagged 'very_unique_identifier'

... и он работает, как ожидалось, и RewindableGenerator есть все необходимые сервисы внутри.

Как я могу использовать константу PHP в обоих местах, чтобы мне не приходилось повторять значение в разных местах? Очевидно, не такая уж большая проблема, но я бы хотел избежать этого, если возможно.

1 ответ

Решение

Вы должны иметь возможность настроить параметр со значением !php/const App\SomeInterface::TAG а затем используйте имя параметра в service.yml.

parameters.yml

parameters:
    interfaceTag: !php/const App\SomeInterface::TAG

а потом

services.yml

services:
  _defaults:
     autowire: true      
     autoconfigure: true 
     public: false
     bind:
       $fooStrategies: !tagged '%interfaceTag%'
Другие вопросы по тегам