2017-04-18 2 views
1

J'ai besoin d'un tableau avec des valeurs par défaut, où je peux les écraser, et en ajouter de nouvelles.
Jusqu'à présent, j'ai obtenu ceci:Configuration de Symfony - Fusionner les valeurs par défaut de arrayNode avec le prototype

$treeBuilder 
    ->root('acme') 
    ->children() 
     ->arrayNode('templates') 
      ->children() 
       ->scalarNode('layout')->defaultValue('my-layout')->cannotBeEmpty()->end() 
       ->scalarNode('navbar')->defaultValue('my-navbar')->cannotBeEmpty()->end() 
      ->end() 
      ->prototype('scalar') 
      ->end() 
     ->end() 
    ->end(); 

Par défaut, le tableau de sortie ressemble à ceci:

Array(
    [templates] => Array(
     [layout] => 'my-layout' 
     [navbar] => 'my-navbar' 
    ) 
) 

Je tournai ma config comme ça

acme: 
    templates: 
     layout: my-new-layout 
     foo: bar 
     hello: world 

Ce que je attendre:

Array(
    [templates] => Array(
     [layout] => 'my-new-layout' 
     [navbar] => 'my-navbar' 
     [foo] => 'bar' 
     [hello] => 'world' 
    ) 
) 

ce que je reçois:

Array(
    [templates] => Array(
     [foo] => 'bar' 
     [hello] => 'world' 
    ) 
) 

Le prototype tout écrase, quelle est la bonne configuration?

+0

Salut @AlexisWbr, avez-vous trouvé la réponse? – mmmm

+0

J'utilise une sorte de solution de contournement mais je n'ai toujours pas trouvé de solution @mmmm – AlexisWbr

Répondre

0

Il existe un prototype non contracté à l'intérieur du nœud de réseau. J'ai également ajouté addDefaultsIfNotSet() au noeud de tableau.

$treeBuilder 
    ->root('acme') 
    ->children() 
     ->arrayNode('templates') 
      ->addDefaultsIfNotSet() 
      ->ignoreExtraKeys() 
      ->children() 
       ->scalarNode('layout')->defaultValue('my-layout')->cannotBeEmpty()->end() 
       ->scalarNode('navbar')->defaultValue('my-navbar')->cannotBeEmpty()->end() 
      ->end() 
     ->end() 
    ->end(); 
+0

Oui mais sans le protype() Je ne peux pas ajouter de nouvelles valeurs, comme dans mon exemple 'foo: bar' et' hello: world'. L'erreur 'InvalidConfigurationException - Options non reconnues" foo, hello "sous acme.templates' est levée – AlexisWbr

+0

Vérifiez ma modification puis. J'ai ajouté 'ignoreExtraKeys' –

+0

En faisant cela, je ne peux tout simplement pas ajouter plus de valeurs dans le tableau – AlexisWbr