2012-11-03 19 views
7

Bir Topic'in birçok sorusu olduğu (birden çok) bir Veri yapısına sahibim ve bir sorunun çok sayıda yanıtı var (bire çok).Symfony 2 formları, gömülü koleksiyonda koleksiyonu gömme

Konu formunda gömülü bir koleksiyon olarak sorular ayarladık ve her şey cookbook entry sayesinde% 100 çalışıyorum.

Soru formundaki bir Yanıt formları koleksiyonunu gömmek için bunu geliştirmeye çalıştığımda sorunla karşılaşıyorum.

En üst düzeydeki prototip formunu içeren veri prototip niteliği, içinde tam form derinliğine sahip olduğundan, hem Soru hem de Yanıt için prototip içerir. Ancak her seviye için aynı yer tutucu __name__'u kullanır.

<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> 

Sen sanırım alt kısmında, gerçekten uzun bir çizgi görebilirsiniz

cevap formu için prototip-prototip (!) 'Dir. Yanıtla ilgili olanları değil, yalnızca ilgili [__name__] yer tutucu ile ilgili sorunun yerini görmenin bir yolu yoktur. Elbette bir soru formunun gerçek örneğini oluşturarak veri prototip Cevap formu için oluşturulan, bu nedenle zaman aynı değere sahip __name__ tüm örneklerini değiştirdiğinde

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

Doing

Zaten tüm yer tutucuların yerini aldı.

Bu

Ben gerçek Soru formunu

<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> 

Gördüğünüz gibi, __name__ tutucu doesnt özelliği eklenecek Tıklamanızdan zaman veri prototip, cevap formu neye benzediği all - soru formu oluşturulduğunda zaten Soru formu için sayı ile değiştirildi.

Symfony'in sağladığı mekanizma ile bu tür çoklu derinlikli gömülü koleksiyona ulaşmak mümkün mü?

Her 'düzey' için aynı yer tutucuyu kullanmaya çalıştığı sürece, nasıl olduğunu göremiyorum.

cevap