Symfony配置-将arrayNode默认值与prototype合并

Symfony配置-将arrayNode默认值与prototype合并,symfony,configuration-files,Symfony,Configuration Files,我需要一个具有默认值的数组,可以在其中覆盖这些值,并添加新值。 到目前为止,我得到了这个: $treeBuilder ->root('acme') ->children() ->arrayNode('templates') ->children() ->scalarNode('layout')->defaultValue('my-layout')->cannotBeE

我需要一个具有默认值的数组,可以在其中覆盖这些值,并添加新值。
到目前为止,我得到了这个:

$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();
默认情况下,输出数组如下所示:

Array(
    [templates] => Array(
        [layout] => 'my-layout'
        [navbar] => 'my-navbar'
    )
)
我这样设置我的配置

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

我的期望:

Array(
    [templates] => Array(
        [layout] => 'my-new-layout'
        [navbar] => 'my-navbar'
        [foo] => 'bar'
        [hello] => 'world'
    )
)
Array(
    [templates] => Array(
        [foo] => 'bar'
        [hello] => 'world'
    )
)
我得到的:

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

原型会覆盖所有内容,正确的配置是什么?

阵列节点内有不必要的原型。我还向数组节点添加了
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();

阵列节点内存在不必要的原型。我还向数组节点添加了
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();

是的,但是如果没有protype(),我就不能添加新值,比如在我的示例
foo:bar
hello:world
中。错误
InvalidConfigurationException-acme下无法识别的选项“foo,hello”。模板
非常多。通过这样做,我无法向数组中添加更多值,但如果没有protype(),我无法添加新值,就像我的示例
foo:bar
hello:world
。acme下的错误
InvalidConfigurationException-无法识别的选项“foo,hello”。模板
被丢弃通过这样做,我无法向arrayHi@AlexisWbr添加更多值,你找到答案了吗?我使用了一种解决方法,但仍然没有找到任何解决方案@mmmmHi@AlexisWbr,你找到答案了吗?我使用了一种变通方法,但仍然没有找到任何解决方案@mmmm