2016-09-21 62 views
0

我一直在努力使树构建配置与Symfony的3解析这样的配置:Symfony的配置树构建

my_bundle: 
    import: 
     paths: 
      - 'some/path' 
      - 'another/path' 

我TreeBuilder作为看起来是这样的:

$rootNode 
    ->children() 
     ->arrayNode('import') 
      ->children() 
       ->arrayNode('paths') 
        ->addDefaultsIfNotSet() 
        ->defaultValue([]) 
        ->cannotBeEmpty() 
       ->end() 
      ->end() 
     ->end() 
    ->end(); 

它基本上是喜欢二维数组配置我想得到的结果。你们能帮我弄清楚吗?

预计解析的配置:

['import' => ['paths' => ['some/path', 'another/path']]] 
+1

什么你明白呢? –

+0

' - > defaultValue()不适用于路径为“my_bundle.import.paths”的具体节点 – Aistis

+0

您想要归档哪种行为?为什么你同时应用'cannotBeEmpty'和'defaultValue([])'? '[]'**是空的。 –

回答

0

貌似我忘了原型的数据结构:

$rootNode 
    ->children() 
     ->arrayNode('import') 
      ->children() 
       ->arrayNode('paths') 
        ->prototype('scalar')->end() 
       ->end() 
      ->end() 
     ->end() 
    ->end(); 
+0

是的,但在这种情况下它可能是空的。这就是为什么我问你为什么要把'cannotBeEmpty()' –

+0

TreeBuilder如果没有配置设置为'config.yml'会怎么看?我的意思是默认值是'['import'=> ['paths'=> []]]'? – Aistis

+0

我相信根节点仍然是必需的,但导入和路径可能是空的。但是一旦你有了代码,这只是一件很容易被检查的事情 –