2017-04-18 1 views
1

기본값을 사용하여 배열을 덮어 쓰고 새 값을 추가해야합니다. 출력 배열은 다음과 같습니다 기본적으로Symfony Configuration - 프로토 타입을 사용하여 arrayNode 기본값 병합

$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(); 

:
지금까지 나는이있어 나는 그

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

처럼 내 설정을 설정

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

내가 예상 :

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

내가 무엇을 얻을 :

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

프로토 타입은 모든 것을 덮어 적절한 구성은 무엇인가?

+0

안녕하세요 @AlexisWbr, 답변을 찾았습니까? – mmmm

+0

나는 일종의 해결 방법을 사용했지만 여전히 해결책을 찾지 못했습니다. @@@ mmmm – AlexisWbr

답변

0

배열 노드 내부에 불필요한 프로토 타입이 있습니다. 또한 배열 노드에 addDefaultsIfNotSet()을 추가했습니다.

$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

네,하지만 protype()이 없으면 제 예제의'foo : bar'와'hello : world'처럼 새로운 값을 추가 할 수 없습니다. 'InvalidConfigurationException - 인식 할 수없는 옵션 "foo, hello"acme.templates'의 오류가 발생했습니다 – AlexisWbr

+0

내 편집을 확인하십시오. 'ignoreExtraKeys'를 추가했습니다 –

+0

이렇게하면 배열에 더 많은 값을 넣을 수 없습니다 – AlexisWbr

관련 문제