如何在 Symfony2 配置中添加具有值的数组?
Posted
技术标签:
【中文标题】如何在 Symfony2 配置中添加具有值的数组?【英文标题】:How to add an array with values in Symfony2 configuration? 【发布时间】:2013-08-05 20:49:49 【问题描述】:我想在配置文件 (config.yml) 中添加一个简单的值列表。例如:
my_bundle:
columns: ["col1", "col2"]
将节点添加到配置解析器时,它只是失败了:
$rootNode = $treeBuilder->root('my_bundle');
$rootNode->arrayNode('columns')->children()->end();
这是错误:
InvalidConfigurationException: Unrecognized options "0, 1" under "my_bundle.columns"
我错过了什么?这甚至可能吗?
【问题讨论】:
【参考方案1】:我认为您缺少 YaML 不是一种标记语言,它甚至不是一种语言(它是一种数据序列化标准),所以它不是不知道任何语言结构,例如数组。它的主要“工具”表示数据位之间的分组和关系是空格、冒号和破折号。 来自symfony documentation page of the YaML format:
my_bundle:
columns:
- col1
- col2
我从这部分收集到的信息:
YAML 文件很少用于描述简单的标量。大多数时候,它描述了一个集合。集合可以是元素的序列或映射。序列和映射都转换为 php 数组。
序列使用破折号后跟空格:
-
PHP
-
Perl
-
Python前面的 YAML 文件等价于以下 PHP 代码:
array('PHP', 'Perl', 'Python');
【讨论】:
["PHP", "Perl", "Python"]
相当于您在 YAML 中的符号。而我所问的确实是可能的,因为 Touki 回答了它。您所要做的就是指定数组包含哪种数据。在我的情况下是字符串/标量。
@i.am.michiel:在这种情况下误读了这个问题。我以为['col1', 'col2']
不起作用,您是否也尝试过明确设置类型? - !!str col1
?
没问题。解析问题不在 YAML 端,而是在 Symfony 端。我所要做的就是在 YAML 解析器中添加一个转换选项,如 Loki 的回答中所述。【参考方案2】:
如果你想实现这样的节点,只需:
$rootNode
->children()
->arrayNode('columns')
->prototype('scalar')
->end()
->end()
->end()
;
【讨论】:
差不多了。我发现另一个提到prototype
方法的问题。在我的例子中,原型必须持有 scalar
并且它有效。
我不明白你想达到什么目的,使用这个代码var_dump($config);
= Array ( [columns] => Array ( [0] => col1 [1] => col2 ) )
不应该在->prototype('scalar')
之后还有另一个->end()
吗?
保存,我的一天!谢谢:)以上是关于如何在 Symfony2 配置中添加具有值的数组?的主要内容,如果未能解决你的问题,请参考以下文章
在数组Vue Js中的另一个不同json对象中具有相同值的数组中的所有json对象中添加/合并新项目
如何修复“将 myBundle 添加到asseticBundle 配置”symfony2 异常?