Как мне определить массив массивов скаляров в Symfony Configuration.php?

Я хочу проанализировать конфигурацию YAML, которая выглядит так:

pageRoles:
  Report1: [abc, xyz, def]
  Report2: [fgh, xxx, yyy, rrr]

Я хочу, чтобы результирующий массив конфигурации выглядел так:

'pageRoles':
  'Report1':
    [
      'abc',
      'xyz',
      'def'
    ],
  'Report2': 
    [
      'fgh',
      'xxx',
      'yyy',
      'rrr'
    ]

У меня есть на данный момент:

    ->arrayNode( 'pageRoles' )
      ->prototype( 'array' )
        ->useAttributeAsKey( 'name' )
        ->prototype( 'array' )
          ->prototype( 'scalar' )->end()
        ->end()
      ->end() // array prototype
    ->end() // pageRoles

И я получаю эту ошибку:

Неверный тип для пути site.pageRoles.ActivityReport.0. Ожидаемый массив, но есть строка

Что мне не хватает?

1 ответ

Решение

Создание деревьев конфигурации Symfony. Мой любимый способ убить скучный день. Кажется, это работает:

    public function getConfigTreeBuilder()
    {
        $treeBuilder = new TreeBuilder('my');
        $treeBuilder->getRootNode()
            ->children()
                ->arrayNode('pageRoles')
                    ->useAttributeAsKey('name')
                     ->arrayPrototype()->scalarPrototype()->end()->end()
                ->end() // pageRoles
            ->end() // root node
        ;
        return $treeBuilder;
    }

После обработки получаю:

array:1 [
  "pageRoles" => array:2 [
    "Report1" => array:3 [
      0 => "abc"
      1 => "xyz"
      2 => "def"
    ]
    "Report2" => array:4 [
      0 => "fgh"
      1 => "xxx"
      2 => "yyy"
      3 => "rrr"
    ]
  ]
]
Другие вопросы по тегам