我使用Symfony4提供的DependencyInjection机制创建了一个Symfony捆绑包。
初始化我的自定义扩展程序后,如SymfonyDocs(https://symfony.com/doc/current/bundles/configuration.html所述,my_extension.yaml中提供的参数将按预期通过管道传递到我的“加载”方法中。
但是,如果我在指定的package-scope中添加了一个额外的yaml文件(例如config / packages / dev / my_extension.yaml),则这些参数最终将被内置的processConfiguration()合并-奇怪的方式:
第一个配置正确解析且所有参数键保持完整,而第二个文件未按预期合并,但是所有包含的值都转换为数字数组键,即原始参数键在途中丢失。
示例:
config / packages / my_extension.yaml的内容
my_extension:
parameters:
some_attribute: "original_value1"
some_other_attribute: "original_value2"
config / packages / dev / my_extension.yaml的内容
my_extension:
parameters:
some_attribute: "new_value1"
specific_attribute: "new_value3"
产生一个看起来像这样的合并配置数组
parameters:
some_attribute: "new_value1"
some_other_attribute: "new_value2"
0: "new_value1"
1: "new_value2"
2: "new_value3"
虽然我希望最终的配置是
parameters:
some_attribute: "new_value1"
some_other_attribute: "original_value2"
specific_attribute: "new_value3"
最后一个(正确的)结果是我将扩展中的“加载”方法中的配置手动合并后得到的结果:
$mergedConfig = [];
foreach($configs as $config) {
$mergedConfig = array_replace_recursive($mergedConfig, $config);
}
$config = $this->processConfiguration($configuration, [$mergedConfig]);
但是,为什么我不能依靠Symfony4为这种情况提供的内置合并策略?这是一个错误还是我对Symfony应该如何合并来自不同Config源的参数有任何误解?