Переопределение конфигурации в Symfony вне основного процесса загрузки конфигурационных файлов - не самое простое дело. Этот процесс закрыт от прямой кастомизации т.к. основной процесс загрузки и обработки конфигурации bundles целиком отдан на откуп им самим. Причина подобных ограничений в том что загрузка конфигурации - один из самых ранних этапов работы и, как и для всех подобных частей кода - там довольно мало пространства для манёвров. В связи с этим путь (и сама возможность) переопределения конфигурации будет очень сильно зависеть от того что же именно вы хотите переопределить.
Для того чтобы лучше понять как это происходит - вам стоит подробнее изучить вопрос того как именно организована загрузка и обработка конфигурации в Symfony.
Если вкратце:
- В процессе конфигурации контейнера происходит сбор данных конфигурации из конфигурационных файлов. Эти данные сохраняются в container'е через ContainerBuilder::loadFromExtension().
- Далее, собранные данные передаются в качестве основы в bundle extension (через метод load()). То, как именно bundle extension будет работать с собранными данными - целиком зависит от кода bundle'а, так что в целом с ними может произойти всё что угодно.
Как вы, надеюсь, понимаете - из-за п.2 какого-то общего подхода к переопределению данных в Symfony не существует. Поэтому, как я уже писал выше, вам необходимо определиться с тем что именно вы хотите переопределить, а дальше смотреть на код загрузчика соответствующего bundle (
вот он для
LiipImagineBundle
).
Как видно - в случае
LiipImagineBundle
в целом ничего страшного не происходит, полученная конфигурация
сразу отправляется в processing и потом используется для регистрации сервисов и параметров.
Поскольку процесс сборки контейнера
начинается с merge pass, то вы не можете вмешаться в этот процесс через compiler pass, как это делается обычно, однако вы можете воспользоваться
вот этим куском логики для того чтобы добиться своей цели: вам достаточно определить в своём bundle собственный
extension и отметить что он реализует
PrependExtensionInterface. Это позволит вашему extension получить экземпляр
ContainerBuilder
до того как будут загружаться остальные extensions, именно это позволит вам воспользоваться
ContainerBuilder::loadFromExtension() для добавления параметров конфигурации к нужному вам bundle.
Несколько нетривиально, но должно работать :)