Я создал пакет 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?