Symfony3 树生成器通用节点值
Symfony3 tree builder generic node value
你如何定义一个你不知道整个结构的包配置?
例如,我有一个处理文件上传的包,我想使用 "slot" 系统创建约束。您为插槽定义一个名称,并关联一个配置(例如添加约束),如下所示:
my_bundle:
slots:
avatar:
constraints:
image:
max_width: 200
cv:
constraints:
pdf:
max_size: 2M
other_option_specific_to_pdf: [1, 2, 3]
捆绑包随后将创建约束并验证您的上传。该包 不知道 可以将哪些选项传递给约束,因此我无法在树构建器中定义它。
可以使用服务标签添加约束,所以我也无法知道在定义树构建器配置时会存在什么约束。
现在,我有以下配置:
$rootNode
->addDefaultsIfNotSet()
->performNoDeepMerging()
->children()
->arrayNode('slots')
->prototype('array')
->children()
->arrayNode('constraints')
->prototype('array')
->prototype('scalar') # Here a constraint may need an array or a more complex object. A "prototype('mixed')" would be handy..
->end()
->end()
->end()
->end()
->end()
->end()
->end();
是否有一个 "wildcard" 节点将它下面的所有内容都作为一个通用数组而不进行任何处理?我没找到。
感谢您的帮助!
编辑
感谢 Mawcel 的回答,更正后的配置如下所示:
$rootNode
->addDefaultsIfNotSet()
->performNoDeepMerging()
->children()
->arrayNode('slots')
->prototype('array')
->children()
->arrayNode('constraints')
->prototype('array')
->prototype('variable') # The wildcard I was looking for..
->end()
->end()
->end()
->end()
->end()
->end()
->end();
您好,您需要将 arrayNode
与 useAttributeAsKey
一起使用,它将允许您使用动态名称的配置参数:
$rootNode
->arrayNode('slots')
->useAttributeAsKey('name')
->prototype('array')
//
http://symfony.com/doc/current/components/config/definition.html#array-node-options
否则您也可以使用 ->variableNode()
定义任意配置值。
http://api.symfony.com/2.3/Symfony/Component/Config/Definition/VariableNode.html
你如何定义一个你不知道整个结构的包配置?
例如,我有一个处理文件上传的包,我想使用 "slot" 系统创建约束。您为插槽定义一个名称,并关联一个配置(例如添加约束),如下所示:
my_bundle:
slots:
avatar:
constraints:
image:
max_width: 200
cv:
constraints:
pdf:
max_size: 2M
other_option_specific_to_pdf: [1, 2, 3]
捆绑包随后将创建约束并验证您的上传。该包 不知道 可以将哪些选项传递给约束,因此我无法在树构建器中定义它。
可以使用服务标签添加约束,所以我也无法知道在定义树构建器配置时会存在什么约束。
现在,我有以下配置:
$rootNode
->addDefaultsIfNotSet()
->performNoDeepMerging()
->children()
->arrayNode('slots')
->prototype('array')
->children()
->arrayNode('constraints')
->prototype('array')
->prototype('scalar') # Here a constraint may need an array or a more complex object. A "prototype('mixed')" would be handy..
->end()
->end()
->end()
->end()
->end()
->end()
->end();
是否有一个 "wildcard" 节点将它下面的所有内容都作为一个通用数组而不进行任何处理?我没找到。
感谢您的帮助!
编辑
感谢 Mawcel 的回答,更正后的配置如下所示:
$rootNode
->addDefaultsIfNotSet()
->performNoDeepMerging()
->children()
->arrayNode('slots')
->prototype('array')
->children()
->arrayNode('constraints')
->prototype('array')
->prototype('variable') # The wildcard I was looking for..
->end()
->end()
->end()
->end()
->end()
->end()
->end();
您好,您需要将 arrayNode
与 useAttributeAsKey
一起使用,它将允许您使用动态名称的配置参数:
$rootNode
->arrayNode('slots')
->useAttributeAsKey('name')
->prototype('array')
//
http://symfony.com/doc/current/components/config/definition.html#array-node-options
否则您也可以使用 ->variableNode()
定义任意配置值。
http://api.symfony.com/2.3/Symfony/Component/Config/Definition/VariableNode.html