Symfony 2 формы, встраивание коллекции во встроенную коллекцию
У меня есть структура данных, в которой у темы много вопросов (один ко многим), а у вопроса много ответов (один ко многим).
Я настроил Вопросы как встроенную коллекцию в форме Темы, и у меня все это работает на 100% благодарязапись поваренной книги.
Когда я пытаюсь разработать это, чтобы встроить набор форм ответов в форму вопросов, я сталкиваюсь с проблемой.
Атрибут data-prototype, который содержит форму прототипа на верхнем уровне, имеет полную глубину формы, поэтому включает в себя прототип для Вопроса и Ответа. Но он использует тот же заполнитель__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="<div class="control-group"><label class="control-label">__name__label__</label><div class="controls"><div id="topic_questions___name___answers___name__"><div class="control-group"><label for="topic_questions___name___answers___name___answerText" class="control-label">option</label><div class="form-row-errors"></div><div class="controls"><input type="text" id="topic_questions___name___answers___name___answerText" name="topic[questions][__name__][answers][__name__][answerText]" required="required" maxlength="255" /></div></div><input type="hidden" id="topic_questions___name___answers___name___sortOrder" name="topic[questions][__name__][answers][__name__][sortOrder]" /></div></div></div>"></div>
</div>
</div>
Вы можете увидеть действительно длинную строку внизу, которая, я думаю, является прототипом-прототипом (!) Для формы ответа. Я не вижу способа заменить только вопрос, связанный с[__name__]
заполнители, а не связанные с ответом.
Делать нормальный
var newForm = prototype.replace(/__name__/g, collectionHolder.children().length);
при создании реального экземпляра формы вопрос, конечно, заменяет все экземпляры__name__
с тем же значением, поэтому при создании прототипа данных для формы ответа уже были заменены все заполнители.
Вот как выглядит прототип данных для формы ответа, когда я щелкнул, чтобы добавить реальную форму вопроса
<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>
Как видите,__name__
заполнитель вообще не используется - он уже был заменен счетчиком для формы Вопроса при создании формы вопроса.
Можно ли достичь такого рода встроенной коллекции с множеством глубин с помощью механизма, предоставляемого Symfony?
Пока он пытается использовать один и тот же заполнитель для каждого «уровня», я не могу понять, как это сделать.