如何在 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 异常?

如何使用 jquery 创建具有来自动态创建的表单字段的值的多维数组?

在配置单元中添加具有恒定值的新列

在 Symfony2 中检测实体配置错误