Symfony4 Extension-> processConfiguration奇怪地合并参数

时间:2019-02-11 15:15:16

标签: configuration bundle symfony4

我使用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源的参数有任何误解?

0 个答案:

没有答案