gpt4 book ai didi

Symfony 配置树构建器

转载 作者:行者123 更新时间:2023-12-04 15:32:42 25 4
gpt4 key购买 nike

我正在寻找创建如下配置:

root_node:
static_key:
dynamic_key_1: [array, of, values]
dynamic_key_2: [array, of, values]

我似乎无法弄清楚正确的 Treebuilder 语法。

我试过了:
$rootNode
->children()
->arrayNode('static_key')
->prototype('scalar')
->end()
->end()
->end()
;

但我得到:

Invalid type for path "root_node.static_key.dynamic_key_1". Expected scalar, but got array.



当我切换到:
$rootNode
->children()
->arrayNode('static_key')
->prototype('array')
->end()
->end()
->end()
;

我得到:

Unrecognized options "0, 1, 2" under "root_node.static_key.dynamic_key_1"



我最终发现我可以使用以下配置传递:
$rootNode
->children()
->arrayNode('static_key')
->prototype('variable')
->end()
->end()
->end()
;

但这并不能保证我得到一个数组。

有人能指出我正确的方向吗?

我知道我可以做这样的事情:
/// treebuilder
$rootNode
->children()
->arrayNode('static_key')
->prototype('array')
->children()
->scalarNode('attr_1')->end()
->scalarNode('attr_2')->end()
->end()
->end()
->end()
->end()
;

# config.yml
root_node:
static_key:
# two different syntaxes for emphasis
dynamic_key_1:
attr_1: value_1
attr_2: value_2
dynamic_key_2: {attr_1: value_3, attr_2: value_4}

并接收以下 PHP 数组:
array('root_node' => array(
'static_key' => array(
'dynamic_key_1' => array(
'attr_1' => 'value_1',
'attr_2' => 'value_2'
),
'dynamic_key_2' => array(
'attr_1' => 'value_3',
'attr_2' => 'value_4'
),
),
));

我以前做过。

我刚刚知道为什么我不能严格要求非关联数组:
{attr_1: value_3, attr_2: value_4}有什么不同对比 [value_3, value_4] ?对我来说,两者都是数组:一个是关联的,另一个不是。

最佳答案

不支持动态 key 。

你应该做这样的事情:

root_node:
static_key:
- { key: dynamic_key_1, value: [array, of, values] }
- { key: dynamic_key_2, value: [array, of, values] }

如果我是对的,你可能会得到这样的结果:
    $rootNode
->children()
->arrayNode('static_key')
->prototype('array')
->children()
->scalarNode('key')->isRequired()->end()
->arrayNode('value')
->prototype('scalar')
->end()
->end()
->end()
->end()
->end()
->end()

关于Symfony 配置树构建器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34323106/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com