Когда создаете повторноиспользуемое или расширяемое приложение, у разработчика часто возникает дилема: создать один большой Bundle или много маленьких. Создание одно большого бандла имеет недостаток в том, что пользователь не может удалить функциональность, которую он не использует. Создание же много маленьких влечет за собой другую проблему: трудность конфигурации всех этих бандлов.

Использование метода ниже, позволить избежать минуса создания множественного Бандла создавая один Расширенный класс предваряющий настройки для любого бандла. Он можете использовать настройки определенный в app/config/config.yml чтобы предварять настройки только если пользователь хочет явно указать их в приложении.

Например, это может быть использовано для конфигурации существующего мэнеджера имен в множестве бандлов. Или это может использовано для включения фиги, которая зависит от другого бандла.

Чтобы дать всю эту мощь Расширенному классу, мы должны реализовать PrependExtensionInterface:

Внутри функции prepend(), разработчик имеет полный доступ к ContainerBuilder экземпляру как раз перед методом load(), который вызывается при каждом регестрировании расширений бандла. Для того чтобы предварять настройки бандлу расширений разработчик может использовать preprendExtensionConfig() на экземпляре ContainerBuilder. Т.к. этот метод только предваряет настройки, то любой другой явно указанный в app/config/config.yml перезапишет их.

Следующий пример показывает как предварительные настройки в множественном Бандле также отключили флаг в множественном банлде, т.к. другой бандл не зарегистророван:

То что написано выше будет эквивалентно если написать в app/config/config.yml если AcmeGoodbyeBundle не зарегистрован и настройки entity_manager_name для acme_hello устновлены по умолчанию: