2012-08-13 6 views
7

Usando la clase de configuración, ¿cómo puedo definir un nodo de matriz sin teclas numéricas? Los elementos secundarios de la matriz no representan más opciones de configuración. Más bien, serán una lista que no podrá ser sobrescrita selectivamente, solo como un todo.Usando la clase de configuración Symfony2, ¿cómo puedo definir un nodo de matriz cuyos hijos no tienen claves?

hasta ahora tengo:

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; 
} 

En app/config.yml, quiero ser capaz de sobreescribir así:

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

Respuesta

22

creo que es necesario

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

Me imaginé en otro lugar sobre el método 'prototipo'. Pero debe agregar '-> end()' como '-> prototype ('escalar') -> end()' o bien la parte '-> defaultValue (' se aplicará a cada elemento de la matriz. – mattalxndr

+0

Y gracias por contándome acerca de '-> addDefaultsIfNotSet()'. Estuve en el medio trabajando en eso. – mattalxndr

+0

@mattalexx, derecha, se olvidó de -> end(). Se corrigió la respuesta. – solarc

Cuestiones relacionadas