3

htmlテーブルとしてアイテムのリストがあります。一部のデータをバッチ モードで保存する機会が必要です。これを行うには、フォーム フィールド名が次のようになる必要があります: provider[i][title]など。しかし、フォーム フィールドを作成しようとすると、エラーが発生します。

フォーム タイプ名 ("provider[0]") が無効です。名前には、文字、数字、および「_」のみを含める必要があります。

私はフォームコレクションについて赤字でしたが、それは私が必要としているものではありません.

$request->request->get('provider') と同じようにフォーム全体を実行してから、実際のデータを取得するために繰り返し処理したい.. 混乱しています!! 私が想像できる最も単純な作業です。

<input type='text' name='provider[0][title]'>
<input type='text' name='provider[1][title]'>
<input type='text' name='provider[2][title]'>

$request->request->all() を使用できます。これは解決策ですが、それほどエレガントではないと思います。何か案は?

4

1 に答える 1

1

これは、"provider[0]" のような名前でフィールドに直接名前を付けることができないのは完全に正常です。フィールド名のこの部分は、Symfony によって生成されます。

私にとって、複数のエンティティを 1 つの形式に格納する唯一の (良い) 方法は、コレクションを使用することです。それらは Symfony2 のドキュメントでよく説明されています: http://symfony.com/doc/current/cookbook/form/form_collections.html

あなたの場合、1 つのコレクション フィールドを含むフォームを作成し、コントローラーまたは JavaScript を使用してフライトに行を追加するだけです。"provider" フィールドについては、1 つのテキスト フィールドを持つ formType を作成するだけです。

html 配列を使用する場合は、エンティティごとに行を追加するだけです。provider[i] の i は、他のエンティティにリンクされていない場合、データベース内のエンティティにバインドされます。

最後に、POST データを使用することは間違いなく良い解決策ではありません。フォーム フィールドのアサーションと CSRF 保護が失われます。

于 2013-06-16T22:04:33.033 に答える