Symfony 包配置数组节点默认值合并

Luc*_*cas 1 php configuration bundle symfony symfony4

我的 Symfony4 捆绑配置有问题。我有一个配置类:

$rootNode
        ->children()
            ->arrayNode('mapping')
                ->useAttributeAsKey('code')
                ->prototype('scalar')->end()
                ->defaultValue(['default' => 'test'])
            ->end()
            .....
        ->end();
Run Code Online (Sandbox Code Playgroud)

这将返回默认配置,例如:

array(1) {
   ["default"]=> string(4) "test"
}
Run Code Online (Sandbox Code Playgroud)

但是当我添加配置文件时:

bundle:
    mapping:
        test: newvalue
        test2: newvalue2
Run Code Online (Sandbox Code Playgroud)

我得到一个配置:

array(2) {
   ["test"]=> string(8) "newvalue"
   ["test2"]=> string(9) "newvalue2"
}
Run Code Online (Sandbox Code Playgroud)

但我希望合并这两个配置以获得:

array(3) {
   ["default"]=> string(4) "test"
   ["test"]=> string(8) "newvalue"
   ["test2"]=> string(9) "newvalue2"
}
Run Code Online (Sandbox Code Playgroud)

如何设置此默认值以与提供的配置合并?当然,我想让“默认”配置被覆盖,但默认被合并。

我在文档上找不到任何解决方案https://symfony.com/doc/current/components/config/definition.html#array-node-options

请帮忙 :)

小智 6

为此,您必须更深入地定义数组配置:

$treeBuilder
   ->children()
       ->arrayNode('mapping')
           ->ignoreExtraKeys()
           ->addDefaultsIfNotSet()
           ->children()
               ->scalarNode('default')
                   ->defaultValue('test)
               ->end()
           ->end()
       ->end()
   ->end()
Run Code Online (Sandbox Code Playgroud)

addDefaultsIfNotSet 将添加您的默认值。ignoreExtraKeys 允许您定义其他键,如示例中所示。最好完全配置按键,因为您可以更好地控制它们。