2012-12-14 39 views
7

使用Symfony2 TreeBuilder,可以爲陣列節點內的每個節點配置原型,例如,支持像Symfony2配置中的嵌套原型

foo: 
    xxx: { foo: bar} 
    yyy: { foo: bar} 

如果有任何數量的XXX,YYY的等等(在所有的任何值)的配置使用像

$rootNode 
    ->arrayNode('foo') 
    ->prototype('array') 
     ->children() 
      ->scalarNode('foo') 

一個結構中的節點我想創建的另一個水平同樣的事情沒有介紹另一個命名節點之間,例如支持的配置等

foo: 
    xxx: 
     aaa: { foo: bar} 
     bbb: { foo: bar} 
    yyy: 
     ccc: { foo: bar} 
     ddd: { foo: bar} 

其中可以存在任何數量的等節點的XXX,YYY,並且其中的每一個可以包含任何數量的其它的AAA,BBB等節點。

有什麼辦法可以達到這個目的嗎?調用->prototype()直接在另一個原型調用的->children()下不起作用,因爲原型似乎不支持嵌套原型。因此,我必須對xxx和yyy的特定值進行硬編碼,這限制了我正在編寫的包的靈活性。

回答

11

簽入symfony 2.2,嵌套工程。

不要嵌套->prototype()之間使用->children()

$rootNode->children() 
    ->arrayNode('foo') 
     ->prototype('array') 
     ->prototype('array') 
      ->children() 
       ->scalarNode('foo'); 
+0

你知道爲什麼它是強制性的,以在這種情況下不使用兒童?剛剛偶然發現了這個問題,在這種情況下使用兒童似乎是一致的。 – k0pernikus

+0

@ k0pernikus我想,因爲原型意味着任何元素的數量。 –