Подключение новых YAML конфиг-файлов в сервис-контейнер Symfony.

В Symfony Сервис-Контейнер создается с использованием одного ресурса конфигурации (по умолчанию это файл config/services.yaml). Это дает вам абсолютную гибкость по отношению к настройкам сервисов в приложении.

Добавить новые конфиги с помощью imports.

По умолчанию конфигурация службы находится в config/services.yaml. Но если этот файл становится большим, вы можете организовать несколько файлов. Предположим, вы решили перенести некоторую конфигурацию в новый файл:

# config/services/mailer.yaml
parameters:
    # ... some parameters

services:
    # ... some services

Чтобы импортировать этот файл, используйте ключ imports из любого другого файла и укажите относительный или абсолютный путь к импортированному файлу:

# config/services.yaml
imports:
    - { resource: services/mailer.yaml }

services:
    _defaults:
        autowire: true
        autoconfigure: true
        public: false

    App\:
        resource: '../src/*'
        exclude: '../src/{DependencyInjection,Entity,Migrations,Tests,Kernel.php}'

    # ...

При загрузке файла конфигурации, Symfony сначала загружает импортированные файлы, а затем обрабатывает параметры и сервисы, определенные в этом файле. Если вы используете конфигурацию services.yaml по умолчанию, как в приведенном выше примере, App\ создает сервисы для классов, найденных в ../src/*. Если ваш импортированный новый конфиг-файл также определяет сервисы для этих классов, то они будут переопределены.

Возможное решение для этого — добавить классы и/или каталоги импортированных файлов в опцию exclude в определении App\ . Другое решение состоит в том, чтобы не использовать импорт и добавлять определения сервисов в тот же файл, но после определения App\ переопределить его.

Из-за способа резолва параметров их нельзя использовать для динамического построения путей при импорте новых конфиг-фалов. Это означает, что что-то вроде следующего не будет работать:

# config/services.yaml
imports:
    - { resource: '%kernel.project_dir%/somefile.yaml' }

Добавить комментарий

Ваш адрес email не будет опубликован.