2012-11-03 33 views
7

トピックには多くの質問(1対多)があり、質問には多くの回答(1対多)があるデータ構造があります。symfony 2フォーム、埋め込みコレクションにコレクションを埋め込む

トピックをフォームに埋め込みコレクションとして設定しましたが、cookbook entryのおかげで100%働いています。

質問フォームに回答フォームのコレクションを埋め込むためにこれを開発しようとすると、問題が発生します。

トップレベルのプロトタイプフォームを含むデータプロトタイプ属性には完全なフォームの深さがあり、質問と回答のプロトタイプも含まれています。しかし、各プレースホルダーは同じプレースホルダー__name__を使用します。

<div id="topic_questions___name__"> 
<div class="control-group"> 
    <label for="topic_questions___name___questionText" class="control-label">question</label> 
    <div class="form-row-errors"></div> 
    <div class="controls"> 
     <textarea id="topic_questions___name___questionText" name="topic[questions][__name__][questionText]" required="required" class="input-block-level"></textarea> 
    </div> 
</div> 
<div class="control-group"> 
    <label class="control-label">answers</label> 
    <div class="controls"> 
     <div id="topic_questions___name___answers"  data-prototype="&lt;div class=&quot;control-group&quot;&gt;&lt;label class=&quot;control-label&quot;&gt;__name__label__&lt;/label&gt;&lt;div class=&quot;controls&quot;&gt;&lt;div id=&quot;topic_questions___name___answers___name__&quot;&gt;&lt;div class=&quot;control-group&quot;&gt;&lt;label for=&quot;topic_questions___name___answers___name___answerText&quot; class=&quot;control-label&quot;&gt;option&lt;/label&gt;&lt;div class=&quot;form-row-errors&quot;&gt;&lt;/div&gt;&lt;div class=&quot;controls&quot;&gt;&lt;input type=&quot;text&quot; id=&quot;topic_questions___name___answers___name___answerText&quot; name=&quot;topic[questions][__name__][answers][__name__][answerText]&quot; required=&quot;required&quot; maxlength=&quot;255&quot; /&gt;&lt;/div&gt;&lt;/div&gt;&lt;input type=&quot;hidden&quot; id=&quot;topic_questions___name___answers___name___sortOrder&quot; name=&quot;topic[questions][__name__][answers][__name__][sortOrder]&quot; /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;"></div> 
    </div> 
</div> 

あなたは私が推測下部にある本当に長いラインを見ることができる

は、回答フォームのプロトタイププロトタイプ(!)です。 [__name__]というプレースホルダーに関する質問だけを回答する方法はありません。答えは答えません。当然の質問形式の実際のインスタンスを作成する際に、通常の

var newForm = prototype.replace(/__name__/g, collectionHolder.children().length); 

を行う

は同じ値で__name__のすべてのインスタンスを置き換え、そのデータ・プロトタイプが回答フォームのために作成されたとき、それは持っていますすでにすべてのプレースホルダーを置き換えました。

これは私が本当の質問形式で__name__プレースホルダdoesntの機能、あなたが見ることができるよう

<div class="control-group"> 
<label class="control-label">1label__</label> 
<div class="controls"> 
    <div id="topic_questions_1_answers_1"> 
     <div class="control-group"> 
      <label for="topic_questions_1_answers_1_answerText" class="control-label">option</label> 
      <div class="form-row-errors"></div> 
      <div class="controls"> 
       <input type="text" id="topic_questions_1_answers_1_answerText" name="topic[questions][1][answers][1][answerText]" required="required" maxlength="255" /> 
      </div> 
     </div> 
    </div> 
</div> 

を追加するためにクリックしたときに、データ・プロトタイプは、回答フォームのように見えるものですすべて - 質問フォームが作成されたときに、すでに質問フォームのカウントに置き換えられていました。

Symfonyが提供するこの種のマルチプルデプスエンベデッドコレクションを実現することは可能ですか?

「レベルごとに同じプレースホルダーを使用しようとすると、私はどのように見えませんか?

答えて

関連する問題