Задать вопрос
BoShurik
@BoShurik
Symfony developer

TreeBuilder. Как описать ассоциативный массив со скалярными значениями?

Зравствуйте!

Есть следующий конфиг:
app:
    search:
        files:
            AppBundle\Entity\Page\Page\Content:
                - content
            AppBundle\Entity\Page\News:
                - content
                - file

Как описать его в TreeBuilder чтобы получить аналогичную структуру?
array (size=2)
  'AppBundle\Entity\Page\Page\Content' => 
    array (size=1)
      0 => string 'content' (length=7)
  'AppBundle\Entity\Page\News' => 
    array (size=2)
      0 => string 'content' (length=7)
      1 => string 'file' (length=4)

На данный момент получилось сделать следующим образом:
$rootNode
    ->children()
        ->arrayNode('search')
            ->children()
                ->arrayNode('files')
                    ->beforeNormalization()->always(function($values){
                        $result = array();
                        foreach ($values as $class => $fields) {
                            $result[$class]['fields'] = $fields;
                        }

                        return $result;
                    })->end()
                    ->prototype('array')
                        ->children()
                            ->arrayNode('fields')->prototype('scalar')->end()
                        ->end()
                    ->end()
                ->end()
            ->end()
        ->end()
    ->end()
;

Но на выходе получаем:
array (size=2)
  'AppBundle\Entity\Page\Page\Content' => 
    array (size=1)
      'fields' => 
        array (size=1)
          0 => string 'content' (length=7)
  'AppBundle\Entity\Page\News' => 
    array (size=1)
      'fields' => 
        array (size=2)
          0 => string 'content' (length=7)
          1 => string 'file' (length=4)


Заранее благодарен.
  • Вопрос задан
  • 154 просмотра
Подписаться 1 Оценить Комментировать
Решения вопроса 1
keltanas
@keltanas
Software Developer
Попробуй
$rootNode
    ->children()
        ->arrayNode('search')
            ->children()
                ->arrayNode('files')
                    ->beforeNormalization()->always(function($values){
                        $result = [];
                        foreach ($values as $class => $fields) {
                            $result[$class] = $fields;
                        }
                        return $result;
                    })->end()
                    ->prototype('array')
                       ->prototype('scalar')->end()
                    ->end()
            ->end()
        ->end()
    ->end()
;
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы