2012-09-22 33 views
12

kullanırken bir yapılandırma dizisinde fazladan, tanımsız seçeneklere izin vermek Configuration nesnesini tanımlamaya çalışıyorum. Bir dizi prototip düğümünü (security.firewalls gibi) başarıyla tanımladım. Prototye dizilimin gerekli bir öğesi var ancak gerekirse her diziye isteğe bağlı parametrelerin eklenmesine izin vermek istiyorum.Symfony2's Yapılandırma sınıfı

Soruma göre, her prototip dizisine ek, tanımlanmamış elemanların eklenmesine nasıl izin verebilirim?

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 

İşte benim sınıf oluşturucu var:

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

alıyorum "InvalidConfigurationException: Tanınmayan seçenekler"

İşte benim yapılandırma var.

Sadece (bir şey içerebilir) düğümü "ekstra" bir değişken eklemek istiyorum
+0

Alternatif 'çağırmaktır -> ignoreExtraKeys (false) '-> prototip ('dizi')'. – apfelbox

cevap

18

:

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

Kişisel yapılandırma sonra görünecektir:

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()' tam aradığım şey, teşekkürler. Symfony docs :('den çok kötü –