0

サブフォームのコレクションを含むフォームがあります-異なる研究を持つ学生-関係manyToOne。私は正しいデータベース スキーマとエンティティを持っており、フォーム ビルダーはうまく機能します。新しい「スタディ」オブジェクトを追加する方法がわかりません。どちらの場合でも、どこかからhtmlタグを取得する必要があります-少なくとも1つの「研究:オブジェクト(彼のクローン)がある場合、またはそのようなものがない場合。

study オブジェクトに name と year の 2 つのフィールドがあるとします。学生にそのようなレコード (オブジェクト) がある場合、生成されたフォームの最初の入力の名前は "student[study][0][name]" です。で囲まれています。「新しいスタディを追加」ボタンをクリックすると、この周囲の div を複製し、html フォーム要素の ID と名前をそれぞれ変更します。すぐに使用できるライブラリまたはメソッドはありますか?

しかし、これまでの研究記録がない場合もあるかもしれません。したがって、ajax 呼び出しを介してサーバーからフォームを取得する必要があります。残念ながら、返されたフォームには「study[name]」のような名前の入力があります。このフォームを最初のケースと同様にレンダリングすることは可能ですか?つまり、「学生[研究][0][名前]」です。しかし、フォームの小枝テンプレートを手動で生成することは避けたい - 私は好む

{{ form_widget(form) }}
4

1 に答える 1

1

data-prototype個別の AJAX リクエストを発行するのではなく、対処する必要があります。サブフォーム項目の追加/削除の全体的な概念は、ここで説明されています:

http://symfony.com/doc/current/reference/forms/types/collection.html#adding-and-removing-items

jQuery明らかに、サブフォーム フィールドをレプリケートするには、いくつかの JS が必要になります (強くお勧めします)。

data-prototypeただし、最初に空のコレクションまたは空でないコレクションがある場合は、動作が異なることに注意してください。少なくとも私はこの奇妙な振る舞いに遭遇しました。私が覚えている限りでは、最初に追加というと{{ form_rest(form) }}、フォームの HTML で構成される属性DIVが追加されます。data-prototype2 番目のケースでは、実際の HTML (属性としてではなく) に ID 属性 "form_name_$$name$$" が追加されます。この場合、$$name$$ を適切なインデックスに置き換える必要があります。

さて、あなたは本当に見てみる必要があります - おそらくこれはすべて最近のバージョンで修正されていますが、私には確信が持てません...

これが少し役立つことを願っています...

于 2012-05-13T23:10:02.883 に答える