2012-11-06 14 views
6

Symfony2でフォームビルダーを使用する際に問題があります。 正確には、html配列の入力フィールドが必要ですが、createFormBuilder-> addで作成することはできません。その上フォームビルダーsymfony2で配列入力フィールドを作成

$attributesForm = $this->createFormBuilder() 
     ->add('attribute[0]', 'text') ... 

そして、私は次の例外を取得:: は、ここに私が試したものです

名を "属性は、[0]" 不正な文字が含まれています。名前は文字、桁またはアンダースコアで始まり、文字、数字、数字、アンダースコア(_)、ハイフン( - )、およびコロン( ":")のみを含む必要があります。

いい解がありますか、手動でフィールドを作成する必要がありますか?

ありがとうございます!

EDIT:

<div id="msoft_adminbundle_offertype"> 
<div>Name <input type="text" name="name"></div> 
<div>...</div> 
<div>Attribute 0 <input type="text" name="attribute[0]"></div> 
<div>Attribute 1 <input type="text" name="attribute[1]"></div> 
<div>Attribute 3 <input type="text" name="attribute[3]"></div> 
<ul> 
    </ul> 
<p> 
    <button type="submit">Edit</button> 
</p> 

ヘルプ:これをさらに明確にする... は、私は、生成されるこのような何かをしたいですか?

答えて

4

入力フィールドの配列は、 'collection'-field型を使用して作成できます。それがここで見つけることができます使用する方法についての

ドキュメント:

Collection documentation

それは十分明らかになっていないか、あなたはまだ、私は喜んで彼らをお届けします質問がある場合。

+0

ありがとうございます!それが正しいように、私は今それを試してみましょう! – markoub

+0

申し訳ありません、追加の注釈: - /それは私がより単純な何かを必要とする... 私は非常に個々のオファーのために設定することができます属性のリストを持って、私はそれらを "属性[0] "属性[1]"などがあります。実際には、別の配列インデックスを使用する必要もありますが、それほど重要ではありません。 これをまとめると、これはもっと複雑です。ユーザーオプションを追加して、フォームの中に新しいフォームを作成し、一連のフィールドを作成することができます。私はちょうど "attribute_1"、 "attribute_2"という名前の代わりに属性配列を取得したいと思っています。 – markoub

+0

あなたが今実際にしたいことは私には分かりません。フォームのサンプルコード(HTML)を生成したい場合は、さらに手伝うことができます。 –

13

以前の回答のとおり、各フィールドが配列の1つのエントリに対応するコレクション型または入れ子形式を使用します。そして、あなたは/これを行うにはしたくないことができない場合には、次の操作を実行できます。

->add('attribute_0', 'text', array(
    'property_path' => 'attribute[0]', 
)) 
+0

ありがとう、私はコレクションを使用し始めました。 – markoub

1

はまた、あなたは、TWIGのフィールドをovverideすることができます。例:

{{ form_row(form[field_name],{ 'full_name': 'attribute[' ~ step ~ ']' })}} 

ここで、stepはインデックスです。

関連する問題