Разрешить пользовательскому пакету добавлять собственные настройки конфигурации для другого пакета (Doctrine)

#php #symfony #doctrine-orm #doctrine

#php #symfony #doctrine-orm #доктрина

Вопрос:

У меня есть пользовательский пакет, давайте назовем его FooBarBundle .

Теперь, из пользовательского расширения, я хотел бы добавить следующее:

 # Doctrine Configuration
doctrine:
    orm:
        mappings:
            FooBarBundle : ~
  

Я убежден, что это не должно быть возможно, но я не могу найти никаких подтверждений того, что один пакет не может добавлять параметры конфигурации другого пакета.

Я не уверен, связано ли это: http://symfony.com/doc/current/bundles/prepend_extension.html

В идеале я хотел бы, чтобы несколько моих собственных пакетов добавляли свои собственные сопоставления Doctrine, а не полагались на обновление Config.yml при использовании каждого пакета.

Комментарии:

1. Компонент конфигурации Symfony позволяет вам определять файлы конфигурации в нескольких местах, чтобы это было возможно. Отчасти это зависит от того, как написано расширение doctrine. У меня возникнет соблазн поместить некоторые инструкции отладки в vendor / doctrine / doctrine-bundle и посмотреть, что произойдет. Немного скептически отношусь к ценности этого, но мне интересно посмотреть, работает ли это,

Ответ №1:

Да, вы можете сделать это для каждого пакета без обновления config.yml файла:

 namespace FooBarBundleDependencyInjection;

// ...

class FooBarExtension extends Extension implements PrependExtensionInterface
{
    //...

    public function prepend(ContainerBuilder $container)
    {
        $container->loadFromExtension('doctrine', array(
            'orm' => array(
                'mappings' => array(
                     'FooBarBundle' => null,
                )
            ),
        ));
    }
}
  

Если у вас много пакетов, каждая конфигурация будет объединена.