Если я правильно понял, вы хотите, чтобы запись default
была всегда определена.Приложения смогут перезаписать значение по умолчанию DEFAULT
из default
.
Хорошо, есть два решения:
Плохое решение
$rootNode = $treeBuilder->getRootNode()
->children()
->arrayNode('mapping')
->useAttributeAsKey('code')
->prototype('scalar')->end()
->beforeNormalization()
->ifArray()
->then(function ($mapping) {
return $mapping + ['default' => 'DEFAULT'];
})
->end()
->end();
Если ключ по умолчанию не определен, он будет добавлен вместе со значением по умолчаниюDEFAULT
значение.Он будет работать для проанализированного файла конфигурации ONE .НО вы получите проблему, если у вас есть два и более файла конфигурации:
# config.yml
mapping:
some: value
default: MY_DEVELOPMENT_DEFAULT
# prod/config.yml
mapping:
some: value_prod
У вас будет:
['some' => 'value_prod', 'default' => 'DEFAULT']
Это неправильно.Значение по умолчанию заменяет MY_DEVELOPMENT_DEFAULT
, поскольку оно было добавлено к prod/config.yml
и объединено с config.yml
.
К сожалению, построитель дерева не позволяет определять обратный вызов после объединения.
Хорошее решение
Вы можете добавить записи по умолчанию после слияния значений конфигурации (например, в проходах компилятора).