2012-09-22 7 views
12

Próbuję zdefiniować obiekt Configuration. Udało mi się zdefiniować prototypowy węzeł macierzy (np. security.firewalls). Moja tablica prototye ma wymagany element, ale chcę, aby w razie potrzeby dodano dowolne parametry do każdej tablicy.Umożliwianie dodatkowych, niezdefiniowanych opcji w tablicy konfiguracji podczas korzystania z klasy konfiguracyjnej Symfony2:

Moje pytanie brzmi: w jaki sposób mogę zezwolić na dodanie dodatkowych, niezdefiniowanych elementów do każdej tablicy prototypów?

Oto mój 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 

Oto moja klasa budowniczy:

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

Dostaję "InvalidConfigurationException: opcje Nierozpoznane".

+0

Alternatywą jest, aby zadzwonić '-> ignoreExtraKeys (false) 'na' -> prototypie ('tablica') '. – apfelbox

Odpowiedz

18

Chciałbym tylko dodać zmienną (może zawierać niczego) węzeł "ekstra":

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

Twój config będzie wtedy wyglądać tak:

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()' jest dokładnie tym, czego szukałem, dzięki. Szkoda, że ​​nie ma go w dokumentach symfony :( –

Powiązane problemy