Symfony4 Extension-> processConfiguration сливает параметры странным образом - PullRequest
0 голосов
/ 11 февраля 2019

Я создал пакет Symfony - используя DependencyInjection-механизм, который предоставляет Symfony4.

Когда мое пользовательское расширение инициализируется, предоставленные параметры из my_extension.yaml попадают в мой метод load как:ожидается, как описано в SymfonyDocs (https://symfony.com/doc/current/bundles/configuration.html).

Однако, если я добавлю дополнительный 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?

...