从另一个包修改包配置

时间:2012-08-24 18:39:06

标签: symfony dependency-injection

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

fos_user:
    db_driver: orm
    firewall_name: main
    user_class: Acme\UserBundle\Entity\User

现在,我想在加载特定扩展名(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'
        );
    }
}

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

编辑:显然,Symfony 2.2有一个pull request来解决这个想法/问题。

编辑2:现在可以在Symfony 2.2中找到它(带有article in the cookbook)。

2 个答案:

答案 0 :(得分:8)

应该注意的是,这现在是Symfony的官方特色:

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

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

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

答案 1 :(得分:1)

在Symfony用户邮件列表(here's the question)上提出同样的问题之后,我发现这个想法有一个开放的pull request

它适用于版本2.2但尚未合并为主版,但最后一项活动是从3天前开始的,所以让我们希望最好!