2013-08-05 106 views
13

我想在配置文件(config.yml)中添加一个简单的值列表。例如:如何在Symfony2配置中添加具有值的数组?

my_bundle: 
    columns: ["col1", "col2"] 

当添加节点到配置解析器,它只是失败:

$rootNode = $treeBuilder->root('my_bundle'); 
$rootNode->arrayNode('columns')->children()->end(); 

以下是错误:

InvalidConfigurationException: Unrecognized options "0, 1" under "my_bundle.columns" 

我缺少什么?这甚至有可能吗?

回答

36

如果你想达到这样一个节点,只是做:

$rootNode 
    ->children() 
     ->arrayNode('columns') 
      ->prototype('scalar') 
      ->end() 
     ->end() 
    ->end() 
; 
+0

差不多。我发现另一个提到'prototype'方法的问题。在我的情况下,原型必须保持“标量”,它的工作。 –

+0

我不明白你想实现什么,然后,使用此代码'的var_dump($配置);'='阵列 ( [列] =>阵列 ( [0] => COL1 [1 ] => col2 ) )' – Touki

+1

不应该在' - > prototype('scalar')'后面有另一个' - > end()'? – liviucmg

0

我想你缺少是YAML不是一种标记语言,它甚至没有一个的langauge这样(这是一个数据序列化标准),所以它不知道任何语言结构,比如数组。其主要的“工具”来表示数据位之间的分组和关系是空格,冒号和破折号。
symfony documentation page of the YaML format

my_bundle: 
    columns: 
     - col1 
     - col2 

当我从本节收集:

YAML文件很少用来描述一个简单的标量。大多数时候,它描述了一个集合。集合可以是元素的序列或映射。序列和映射都转换为PHP数组。

序列使用破折号后跟一个空格:

- PHP

-的Perl

-的Python

先前YAML文件相当于下面的PHP代码:

array('PHP', 'Perl', 'Python'); 
+1

'[“PHP”,“Perl”,“Python”]'相当于YAML中的符号。当Touki回答时,我所问的确是可能的。你所要做的就是指定数组包含哪种数据。在我的情况下字符串/标量。 –

+0

@ i.am.michiel:在这种情况下误读了问题。我以为'['col1','col2']'没有工作,你是否尝试明确设置类型? ' - !! str col1'? –

+0

没问题。解析问题不在YAML方面,而在Symfony方面。我所要做的只是在Loki的答案中提到的在YAML解析器中添加一个转换选项。 –

相关问题