Symfony 2表单:嵌入集合在嵌入集合中

7
我有一个数据结构,其中一个主题有许多问题(一对多),而一个问题有许多答案(一对多)。
我已经将问题设置为嵌入式集合在主题表单中,并且由于教程的帮助,我已经使其完全正常工作。
当我尝试将答案表单的集合嵌入到问题表单中时,我遇到了一个问题。
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="&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__的实例替换为相同的值,因此当为答案表单创建数据原型时,它已经替换了所有占位符。

当我点击添加真正的问题表单时,答案表单的数据原型就像这样:

<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 提供的机制,能否实现这种多层嵌套集合?

只要尝试为每个“级别”使用相同的占位符,我就看不到如何做到。

1个回答

12

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接