2013-08-05 11 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の表記法と同じです。私が尋ねてきたことは、戸内が答えたように確かに可能です。配列に含まれるデータの種類を指定するだけです。私の場合は文字列/スカラー。 –

+0

@ i.am.michiel:その場合、質問を誤読します。私は '['col1'、 'col2']'は動作していないと思ったのですが、明示的にタイプを設定しようとしましたか? ' - !! str col1'? –

+0

問題ありません。そして、解析の問題はYAML側ではなく、Symfony側で起こっていました。私がしなければならなかったのは、Lokiの答えに記載されているように、YAMLパーサーに変換オプションを追加することでした。 –

関連する問題