从另一个包修改包配置

Ram*_*iss 8 dependency-injection symfony

我想知道是否可以修改另一个捆绑包中的捆绑配置.比方说,我正在使用具有以下配置的FOSUserBundle:

fos_user:
    db_driver: orm
    firewall_name: main
    user_class: Acme\UserBundle\Entity\User
Run Code Online (Sandbox Code Playgroud)

现在,我想在加载特定扩展名时更改用户类(AcmeFoobarExtension).是否可以在加载时更改配置AcmeFoobarExtension?例如:

<?php
namespace Acme\FoobarBundle\DependencyInjection;

// use statements for dependency injection

class FoobarExtension extends Extension
{
    public function load(array $configs, ContainerBuilder $container)
    {
        $container->setConfiguration(
            'fos_user.user_class',
            'Acme\FoobarBundle\Entity\User'
        );
    }
}
Run Code Online (Sandbox Code Playgroud)

这样的事情可能吗?或者说它依赖注入的目的?

编辑:显然有一个针对Symfony 2.2 的拉取请求,它解决了这个想法/问题.

编辑2:现在可以在Symfony 2.2中找到它(在食谱中一篇文章).

lxg*_*lxg 9

应该注意的是,这现在是Symfony的官方功能:

http://symfony.com/doc/current/cookbook/bundles/prepend_extension.html

bundle可以将配置值添加到全局配置参数中.为此,捆绑扩展必须实现PrependExtensionInterface.prepend()然后,该方法可以添加全局配置值.

但请注意,这些值可能会被其他包和配置文件本身覆盖.