Php 如何在Symfony2中扩展不同bundle的配置?

Php 如何在Symfony2中扩展不同bundle的配置?,php,symfony,Php,Symfony,我知道我可以覆盖模板或扩展其他捆绑包的类。但是我可以扩展配置吗?我希望能够在DependenyInjection/AcmeExtension.php的加载方法中从config加载其他名称空间,但我在任何地方都找不到任何相关内容 示例: 我有一个AcmeBundle,它在配置中定义了以下内容: acme: a: 1 我希望扩展此捆绑包(在名为AwesomeAcmeBundle的新捆绑包中),并能够通过将其他变量添加到原始名称空间来定义它们: acme: a: 1 b: 2

我知道我可以覆盖模板或扩展其他捆绑包的类。但是我可以扩展配置吗?我希望能够在
DependenyInjection/AcmeExtension.php
的加载方法中从config加载其他名称空间,但我在任何地方都找不到任何相关内容

示例:

我有一个AcmeBundle,它在配置中定义了以下内容:

acme:
    a: 1
我希望扩展此捆绑包(在名为AwesomeAcmeBundle的新捆绑包中),并能够通过将其他变量添加到原始名称空间来定义它们:

acme:
    a: 1
    b: 2
或者通过将原始名称空间包装到新名称空间并在其中添加新变量:

awesome_acme:
    a: 1
    b: 2

如果您谈论的是
.yml
s,则可以使用导入
AwesomeAcmeBundle
config中的
AcmeBundle
s confing

imports:
    - { resource: path/to/AcmeBundles/config.yml }
然后覆盖所需的参数


Symfony在
config_dev.yml
中使用
framework/router
参数进行了同样的操作。

我也有类似的需求,我已通过以下方式解决了它们:

imports:
 - { resource: @YourBundle/Resources/config/services.yml }
1) 扩展父级的配置类

//FooBundle\DependencyInjection\Configuration.php

use DerpBundle\DependencyInjection\Configuration as BaseConfiguration;

class Configuration extends BaseConfiguration
{

    public function getConfigTreeBuilder()
    {
        $treeBuilder = parent::getConfigTreeBuilder();

        //protected attribute access workaround
        $reflectedClass = new \ReflectionObject($treeBuilder);
        $property = $reflectedClass->getProperty("root");
        $property->setAccessible(true);

        $rootNode = $property->getValue($treeBuilder);

        $rootNode
           ->children()
           ...

        return $treeBuilder;
     }
}
2) 创建自己的扩展,该扩展实际上可以处理新的配置条目

class FooExtension extends Extension
{

    public function load(array $configs, ContainerBuilder $container)
    {

        $configuration = new Configuration();
        $config = $this->processConfiguration($configuration, $configs);

        //custom parameters
        $container->setParameter('new_param_container_name', $config['new_param_name']);

     ...
     }
}

3) 在
app\config\config.yml
中,您可以在新的
foo
属性中使用
derp
(作为父包)拥有的所有参数,以及您在
Configuration.php
中定义的任何新参数。不,这不是我的意思。我想扩展一些bundle的配置(aka
DependencyInjection/configuration.php
),而不仅仅是配置文件。我必须向现有bundle配置中添加一些额外的配置。在现有捆绑包的根节点下。它不会以这种方式工作,因为symfony不允许使用除带下划线的捆绑包名称版本之外的任何其他根名称。您知道一种方法可以真正扩展现有的配置树,同时保持在同一根节点下吗?