【发布时间】:2016-01-15 13:44:43
【问题描述】:
我有一个 symfony2 应用程序,它需要针对某些环境进行不同的配置设置,例如test.
我为测试环境覆盖我的 config.yml,如下所示:
AppKernel.php:
public function registerContainerConfiguration(LoaderInterface $loader)
{
foreach ($this->getBundles() as $bundle) {
if (false === strpos($bundle->getName(), 'Dreamlines')) {
continue;
}
$configFile = $bundle->getPath() . '/Resources/config/config.yml';
if (!file_exists($configFile)) {
continue;
}
$loader->load($configFile);
}
$loader->load(__DIR__ . '/config/config_' . $this->getEnvironment() . '.yml');
}
在我的config.yml 我定义:
default_airports:
cun:
de:
- FRA
在我的 config_test.yml 中,我定义了以下内容来覆盖该值:
default_airports:
cun:
de:
- HAM
我的 ConfigTreeBuilder 寻找的配置看起来像
$treeBuilder = new TreeBuilder();
$rootNode = $treeBuilder
->root('le_bundle');
$rootNode
...
->arrayNode('default_airports')
->isRequired()
->requiresAtLeastOneElement()
->useAttributeAsKey('name')
->prototype('array')
->prototype('array')
->prototype('scalar')->end()
->end()
->end()
->end()
然而配置没有被正确覆盖,导致测试运行失败。
这里发生了什么?我已经使用此策略成功重写了其他配置条目。
【问题讨论】:
-
我想知道你为什么要执行 foreach 并检查 AppKernel 而不是使用依赖注入扩展。
-
@malcolm 简单的回答:这是遗留问题 ^^ 所以我无法说出这样做的原因。你能举个例子来说明你的意思吗?
-
我的意思是依赖注入中的扩展类在自己的包中,如果你在
load方法中做processConfiguration,你的包配置依赖于实际环境。 symfony.com/doc/current/cookbook/bundles/…
标签: php symfony configuration