2012-12-14 14 views
7

Con Symfony2 TreeBuilder, è possibile configurare prototipi per ciascun nodo all'interno di un nodo di matrice, ad es. per supportare una configurazione comePrototipi nidificati in configurazione Symfony2

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

Qualora ci sono un certo numero di xxx, yyy e così via (qualsiasi valore affatto) nodi utilizzando una struttura simile

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

desidero creare un altro livello di la stessa cosa senza introdurre un altro nodo chiamato in mezzo, ad es per supportare una configurazione come

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

dove ci può essere un qualsiasi numero di xxx, yyy ecc nodi, ciascuno dei quali può contenere un numero qualsiasi di altri aaa, bbb ecc nodi.

Esiste un modo per raggiungere questo obiettivo? Chiamare ->prototype() direttamente sotto il ->children() di un'altra chiamata di prototipo non funziona, in quanto i prototipi non sembrano supportare i prototipi nidificati. Di conseguenza, ho bisogno di codificare i valori specifici per xxx e yyy, limitando la flessibilità del pacchetto che sto scrivendo.

risposta

11

Controllato in symfony 2.2, il nesting funziona.

Non utilizzare ->children() tra annidati ->prototype():

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

sapete perché è obbligatorio non utilizzare i bambini in questo caso? Si sono imbattuti in questo problema, e in questo caso è sembrato coerente utilizzare i bambini. – k0pernikus

+0

@ k0pernikus Suppongo che il prototipo significhi un conteggio di elementi. –

Problemi correlati