2012-09-22 56 views
12

我試圖定義一個Configuration對象。我已經成功定義了一個數組原型節點(如security.firewalls)。我的prototye數組有一個必需的元素,但我想允許任意參數添加到每個數組,如果需要的話。在使用Symfony2的配置類時允許在配置數組中使用額外的未定義選項

我的問題是,我怎麼能允許額外的,未定義的元素添加到每個原型數組?

這裏是我的配置:

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 

這裏是我的類構造器:

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

我得到 「InvalidConfigurationException:無法識別的選項」。

+0

另一種方法是調用' - > ignoreExtraKeys(假')在' - >原型('數組')上。 – apfelbox

回答

18

我想補充一個變量(可以包含任何東西)節點的 「額外」:

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

你的配置會再看看這樣的:

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()'正是我所期待的,謝謝。太糟糕了,它從symfony文檔中丟失:( –

相關問題