2012-09-22 19 views
12

Estoy tratando de definir un objeto Configuration. Definí con éxito un nodo de prototipo de matriz (como security.firewalls). Mi matriz prototye tiene un elemento requerido, pero quiero permitir que se agreguen parámetros arbitrarios a cada matriz si es necesario.Permitir opciones indefinidas adicionales en una matriz de configuración cuando se usa la clase de Configuración de Symfony2

Mi pregunta es, ¿cómo puedo permitir agregar elementos indefinidos adicionales a cada matriz de prototipos?

Aquí es mi config:

acme_widget: 
    handlers: 
     handler_one: 
      service: handler.one.service 
     handler_two: 
      service: handler.two.service 
      extra_array: 
       - Extra 1 
       - Extra 2 
      extra_scalar: Extra 3 

Aquí es mi constructor de clase:

/** 
    * Generates the configuration tree. 
    * 
    * @return TreeBuilder 
    */ 
    public function getConfigTreeBuilder() 
    { 
     $treeBuilder = new TreeBuilder; 
     $rootNode = $treeBuilder->root('acme_widget'); 

     $rootNode 
      ->children() 
       ->arrayNode('handlers') 
        ->useAttributeAsKey('service') 
        ->prototype('array') 
         ->children() 
          ->scalarNode('service')->isRequired()->end() 
          ->booleanNode('enabled')->defaultTrue()->end() 
         ->end() 
        ->end() 
       ->end() 
      ->end() 
     ; 

     return $treeBuilder; 
    } 

que estoy recibiendo "InvalidConfigurationException: opciones no reconocidas".

+0

Una alternativa es llamar '-> ignoreExtraKeys (falso) 'en el prototipo' -> ('array') '. – apfelbox

Respuesta

18

me acaba de agregar una variable (puede contener cualquier cosa) nodo "extra":

->scalarNode('service')->isRequired()->end() 
->booleanNode('enabled')->defaultTrue()->end() 
->variableNode('extra')->end() 

Su configuración sería el siguiente aspecto:

acme_widget: 
    handlers: 
     handler_one: 
      service: handler.one.service 
     handler_two: 
      service: handler.two.service 
      extra: 
       array: 
        - Extra 1 
        - Extra 2 
       scalar: Extra 3 
+1

'variableNode()' es exactamente lo que estaba buscando, gracias. Lástima que falta en los documentos de Symfony :( –

Cuestiones relacionadas