2012-08-13 10 views
7

Utilizzando la classe di configurazione, come si definisce un nodo di matrice senza tasti numerici? I figli dell'array non rappresentano ulteriori opzioni di configurazione. Piuttosto, saranno una lista che non sarà in grado di essere sovrascritta selettivamente, solo nel suo complesso.Usando la classe di configurazione Symfony2, come posso definire un nodo della matrice i cui figli non hanno le chiavi?

Finora ho:

public function getConfigTreeBuilder() 
{ 
    $treeBuilder = new TreeBuilder; 
    $root = $treeBuilder->root('acme_base'); 

    $root 
     ->children() 
      ->arrayNode('entities') 

       // Unfortunately, this doesn't work 
       ->defaultValue(array(
        'Acme\BaseBundle\Entity\DefaultEntity1', 
        'Acme\BaseBundle\Entity\DefaultEntity2', 
       )) 

      ->end() 
     ->end(); 

    return $treeBuilder; 
} 

In app/config.yml, voglio essere in grado di sovrascrivere in questo modo:

acme_base: 
    entities: 
    - 'Acme\BaseBundle\Entity\AnotherEntity1' 
    - 'Acme\BaseBundle\Entity\AnotherEntity2' 
    - 'Acme\BaseBundle\Entity\AnotherEntity3' 
    - 'Acme\BaseBundle\Entity\AnotherEntity4' 

risposta

22

Penso che è necessario

$root 
    ->children() 
     ->arrayNode('entities') 
     ->addDefaultsIfNotSet() 
     ->prototype('scalar')->end() 
     ->defaultValue(array(
      'Acme\BaseBundle\Entity\DefaultEntity1', 
      'Acme\BaseBundle\Entity\DefaultEntity2', 
     )) 
    ->end() 
+1

Ho solo pensato da qualche altra parte sul metodo 'prototipo'. Ma è necessario aggiungere '-> end()' come '-> prototype ('scalar') -> end()' oppure '-> defaultValue (' la parte verrà applicata a ogni elemento dell'array. – mattalxndr

+0

E grazie per mi parli di '-> addDefaultsIfNotSet()'. Ero nel bel mezzo di averlo appena pubblicato. – mattalxndr

+0

@mattalexx, giusto, ho dimenticato -> end(). – solarc

Problemi correlati