2012-09-22 18 views
12

Sto tentando di definire un oggetto Configuration. Ho definito con successo un nodo prototipo di array (come security.firewalls). Il mio array prototye ha un elemento richiesto ma voglio consentire l'aggiunta di parametri arbitrari a ogni array, se necessario.Opzioni aggiuntive non definite in un array di configurazione quando si utilizza la classe di configurazione di Symfony2

La mia domanda è, come posso consentire di aggiungere elementi extra non definiti a ciascun array di prototipi?

Ecco la mia configurazione:

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 

Ecco il mio costruttore di classe:

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

sto ottenendo "InvalidConfigurationException: opzioni non riconosciuti".

+0

Un'alternativa è quella di chiamare '-> ignoreExtraKeys (false) 'su' -> prototype ('array') '. – apfelbox

risposta

18

vorrei solo aggiungere una variabile (può contenere qualsiasi cosa) nodo di "extra":

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

tuo config sarebbe quindi simile:

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()' è esattamente quello che stavo cercando, grazie. Peccato che manchi dei documenti di symfony :( –

Problemi correlati