我有一个UserType表单,用于编辑用户实体。每个用户都有一个Permission集合,通过CollectionType with
进行管理[ 'entry_type'=>'PermissionType', 'allow_add'=>true, 'prototype'=>true ]
从Doctrine加载User对象时,权限是正确的,并且在呈现视图时它们会正确显示。当我单独渲染权限时:
{%for R in form.permissions%}
{{form_widget(R)}}{{form_label(R)}}{{form_errors(R)}}
{%endfor%}
我的包含元素的data-attribute标签如下呈现:
data-prototype="{{form_widget(form.permissions.vars.prototype)|e}}"
但是原型只包含一个空div(但正确命名为id)。
data-prototype="<div id="user_permissions___name__"></div>"
文档说明了这一点:
If you render your whole "tags" sub-form at once (e.g.
form_row(form.tags)), then the prototype is automatically available on
the outer div as the data-prototype attribute, similar to what you see
above.
所以我也尝试了这种方法,然后生成的div的data-prototype属性也包含一个标签:
data-prototype="<div><label class="required">__name__label__</label><div id="user_permissions___name__"></div></div>"
为我的测试用例生成的三个PermissionTypes产生了完美的输出。
所以我的问题是:我的原型未正确呈现的原因是什么?我也许发现了一个错误吗?我也尝试过立即呈现完整表单的情况,与第二种情况相同。
答案 0 :(得分:0)
我找到了,我犯了一个错误。我在PRE_SET_DATA FormEvent中向表单添加了某些输入元素,因为我想更改标签以反映一些数据。但是,当Symfony生成数据原型时,它会调用buildForm,但它不会设置任何数据。因此产生的空div实际上是非常正确的。直接在buildForm中构建表单解决了它。