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的配置(akaDependencyInjection/configuration.php
),而不仅仅是配置文件。我必须向现有bundle配置中添加一些额外的配置。在现有捆绑包的根节点下。它不会以这种方式工作,因为symfony不允许使用除带下划线的捆绑包名称版本之外的任何其他根名称。您知道一种方法可以真正扩展现有的配置树,同时保持在同一根节点下吗?