项“prototype"为“Array"不存在


Item "prototype" for "Array" does not exist

我正在使用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'解决了问题