Смешивание позиционных и ключевых аргументов в определении сервиса с использованием YAML - PullRequest
1 голос
/ 12 марта 2020

При настройке службы с использованием XML мы можем сделать следующее:

 <service id="foobar" class="App\Foobar" public="false" abstract="true">
       <argument type="service" id="doctrine" />
       <argument>null</argument>
       <argument type="service" id="logger" on-invalid="ignore" />
       <argument key="$bombastic" type="service"
            id="bombastic.service" on-invalid="ignore" />
</service>

Первые три аргумента являются позиционными (первые три аргумента в конструкторе), а последний - ключ к имени параметра. Поскольку фактическая служба имеет 5 аргументов, четвертый аргумент остается неопределенным, поэтому он может быть определен службой, которая расширяет службу foobar.

Что очень хорошо.

В YAML Документация показывает, как использовать ключевые аргументы, например:

App\Updates\SiteUpdateManager:
        arguments:
            $someService: '@manager'

и позиционные аргументы, подобные этому:

App\Updates\SiteUpdateManager:
        arguments:
            - '@manager'

Но я бы хотел сделать то же самое, что и приведенная выше конфигурация XML, но с использованием YAML (поскольку вся конфигурация службы для этого приложения уже находится в YAML, и я не хотел бы добавлять один XML файл конфигурации только для этой службы).

Как я могу объединить два стиля с конфигурацией YAML?

1 Ответ

1 голос
/ 13 марта 2020

Пытается объединить проиндексированные аргументы с ключевыми, например:

App\Updates\SiteUpdateManager:
    arguments:
        0: '@doctrine'
        1: null
        2: '@?logger' 
        $bombastic: '@?bombastic.service'
...