Symfony配置 - 合并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();

默认情况下,输出数组看起来像这样:

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'
    )
)

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

阵列节点内有未经表演的原型。我还将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();

最新更新