2013-08-05 84 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解析器中添加一個轉換選項。 –

相關問題