我正在寻找如下配置:
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()
;
但我明白了:
路径“root_node.static_key.dynamic_key_1”的类型无效。期望的标量,但得到阵列。
当我切换到:
$rootNode
->children()
->arrayNode('static_key')
->prototype('array')
->end()
->end()
->end()
;
我明白了:
“root_node.static_key.dynamic_key_1”下无法识别的选项“0,1,2”
我最终发现我可以使用配置传递:
$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]
有什么不同?对我来说,两者都是数组:一个是关联的,另一个不是。
答案 0 :(得分:3)
不支持动态密钥。
你应该做这样的事情:
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()