Как проанализировать пары простых ключей => значений с помощью компонента конфигурации symfony

#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') , прежде чем задавать этот вопрос, и это не сработало… Я вроде как ожидал, что «скалярный» тип также будет охватывать целое число. Спасибо!