#php #symfony #yaml #config
#php #symfony #ямл #конфигурация #yaml
Вопрос:
Я пытаюсь интегрировать компонент конфигурации Symfony и испытываю некоторые проблемы с получением его для анализа требуемого формата YAML. Я не могу найти способ, чтобы компонент конфигурации принимал простые пары ключ => значение из файла YAML.
Мой текущий конструктор дерева для раздела «ограничения»:
$treeBuilder = new TreeBuilder('limits');
$node = $treeBuilder->getRootNode();
foreach ($keys as $key) {
$node
->isRequired()
->children()
->arrayNode('comment')
->isRequired()
->requiresAtLeastOneElement()
->useAttributeAsKey('name', false)
->prototype('array')
->canBeDisabled()
->treatNullLike(['enabled' => false])
->children()
->integerNode('duration')->end()
->integerNode('limit')->end()
->arrayNode('thresholds')
->useAttributeAsKey('name', false)
->prototype('array')
->children()
->scalarNode('name')->end()
->integerNode('value')->end()
->end()
->end()
->end()
->end()
->end()
->end()
->end();
}
return $node;
Дерево yaml, которое я уже могу проанализировать, выглядит следующим образом:
limits:
comment:
per_hour:
duration: 3600
limit: 100
thresholds:
key1:
value: 50
key2:
value: 60
...
И я хочу изменить его, чтобы я мог написать конфигурацию следующим образом:
limits:
comment:
per_hour:
duration: 3600
limit: 100
thresholds:
key1: 50
key2: 60
...
Есть идеи, как я мог бы изменить древовидный конструктор, чтобы получить требуемый формат?
Спасибо!
Ответ №1:
начиная с вашего кода, изменяя ваше thresholds
определение на это, следует делать то, что вы ожидаете :
->arrayNode('thresholds')
->useAttributeAsKey('name', false)
->prototype('integer')->end()
->end()
Комментарии:
1. Я пробовал
prototype('scalar')
, прежде чем задавать этот вопрос, и это не сработало… Я вроде как ожидал, что «скалярный» тип также будет охватывать целое число. Спасибо!