2016-09-21 90 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

我相信根節點仍然是必需的,但導入和路徑可能是空的。但是一旦你有了代碼,這只是一件很容易被檢查的事情 –