我正在使用Symfony2和mopaboostrap。我想在我的表单中添加一个电子邮件收集元素,直到今天一切都很顺利(我真的不知道为什么)
我得到以下错误:
Item "prototype" for "Array" does not exist in *snip*.html.twig at line 36
是这样的:
<span id="member-fields-list" data-prototype="{{ form_widget(form.members.vars.prototype)|e }}"></span>
我搜索了一会儿,发现只有一个提示:我的集合元素是空的(它将通过javascript填充),但如果我添加一个值,它将工作
$UserList = new UserList();
**********snip***********
$UserList->setMembers(array());
$form = $this->createFormBuilder($UserList)
**********snip***********
->add('members', 'collection', array(
'type' => 'email',
'prototype' => true,
// 'allow_add' => true,
'allow_delete' => true,
'options' => array(
'required' => true,
'attr' => array(
'class' => 'email-box',
'readonly' => 'readonly',
),
),
)
)
编辑:得到解决方案
取消'allow_add'注释XD
form_widget用于获取集合中的一个小部件(理解为"一个子字段"),而form_row用于获取完整的原型(示例中成员的所有子字段)。
所以使用form_row来显示成员的完整原型:
{{ form_row(form.members.vars.prototype)|e }}
使用form_widget只获取成员的一个字段,例如"username":
{{ form_widget(form.members.vars.prototype.username)|e }}
您也可以单独获得一个字段及其标签的form_error:
{{ form_errors(form.members.vars.prototype.username)|e }}
{{ form_label(form.members.vars.prototype.username, 'My label')|e }}
uncomment 'allow_add'解决了问题