symfony collectiontype data-prototype输出不完整,只渲染空div

时间:2016-03-25 02:15:42

标签: symfony-forms symfony

我有一个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产生了完美的输出。

所以我的问题是:我的原型未正确呈现的原因是什么?我也许发现了一个错误吗?我也尝试过立即呈现完整表单的情况,与第二种情况相同。

1 个答案:

答案 0 :(得分:0)

我找到了,我犯了一个错误。我在PRE_SET_DATA FormEvent中向表单添加了某些输入元素,因为我想更改标签以反映一些数据。但是,当Symfony生成数据原型时,它会调用buildForm,但它不会设置任何数据。因此产生的空div实际上是非常正确的。直接在buildForm中构建表单解决了它。