2012-12-14 17 views
7

Dzięki Symfony2 TreeBuilder możliwe jest konfigurowanie prototypów dla każdego węzła wewnątrz węzła macierzy, np. wspierać konfigurację jakZagnieżdżone prototypy w konfiguracji Symfony2

foo: 
    xxx: { foo: bar} 
    yyy: { foo: bar} 

Jeżeli istnieją dowolną liczbę xxx yyy i tak dalej (każda wartość w ogóle) węzłów za pomocą struktury jak

$rootNode 
    ->arrayNode('foo') 
    ->prototype('array') 
     ->children() 
      ->scalarNode('foo') 

Chciałbym utworzyć kolejny poziom to samo, bez wprowadzania kolejnego węzła między nimi, np do wspierania konfiguracji jak

foo: 
    xxx: 
     aaa: { foo: bar} 
     bbb: { foo: bar} 
    yyy: 
     ccc: { foo: bar} 
     ddd: { foo: bar} 

gdzie może być dowolna ilość, xxx i yyy itd węzłów, z których każdy może zawierać dowolną liczbę innych AAA BBB itp węzłów.

Czy jest jakiś sposób, aby to osiągnąć? Wywołanie ->prototype() bezpośrednio pod ->children() innego połączenia prototypowego nie działa, ponieważ prototypy nie obsługują zagnieżdżonych prototypów. W związku z tym muszę podać konkretne wartości dla xxx i yyy, ograniczając elastyczność pakietu, który piszę.

Odpowiedz

11

Sprawdzone w Symfony 2.2, zagnieżdżanie działa.

Nie używaj ->children() między zagnieżdżony ->prototype():

$rootNode->children() 
    ->arrayNode('foo') 
     ->prototype('array') 
     ->prototype('array') 
      ->children() 
       ->scalarNode('foo'); 
+0

Czy wiesz, dlaczego to nie jest obowiązkowe korzystać dzieci w tym przypadku? Po prostu natknąłem się na ten problem i wydawało się konsekwentne używać dzieci w tym przypadku. – k0pernikus

+0

@ k0pernikus Przypuszczam, że ponieważ prototyp oznacza dowolną liczbę elementów. –

Powiązane problemy