php – Symfony 2表单,在嵌入式集合中嵌入集合
我有一个数据结构,其中一个主题有很多问题(一对多),一个问题有很多答案(一对多).
我已经将问题设置为主题形式的嵌入式集合,并且由于cookbook entry,我完全可以工作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__的所有实例,因此当为Answer表单创建数据原型时,它已经替换了所有占位符. 当我点击添加一个真实的问题表单时,这就是数据原型在答案表单中的样子 <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提供的机制实现这种多深度嵌入式集合? 只要它试图为每个“级别”使用相同的占位符,那么我就看不出如何.
你是否至少使用Symfony 2.1?如果是这样,您可以使用属性prototype_name更改__name__标签:
http://symfony.com/doc/master/reference/forms/types/collection.html#prototype-name 在你的形式: ->add('answers','collection',array( 'type' => new AnswerType(),'allow_add' => true,'prototype_name' => 'another_name' )) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |