Php Symfony 2表格错误“;此表单不应包含额外字段。”;提交表格时

Php Symfony 2表格错误“;此表单不应包含额外字段。”;提交表格时,php,forms,symfony,sylius,php-5.6,Php,Forms,Symfony,Sylius,Php 5.6,我正在提交表单并在SyliusResourceController中处理它,Sylius将提交表单并对其进行验证 这是现场表格: <tr> <form method="post" action="{{ path('backend_course_row_update', { 'courseeId' : course.id, 'id' : row.id }) }}" novalidate> {{ form_widget(form.channel) }}

我正在提交表单并在Sylius
ResourceController
中处理它,Sylius
将提交表单并对其进行验证

这是现场表格:

<tr>
   <form method="post" action="{{ path('backend_course_row_update', {
 'courseeId' : course.id, 'id' : row.id }) }}" novalidate>
     {{ form_widget(form.channel) }}
     {{ form_widget(form.name) }}
     {% for size in form.sizes %}
        {{ form_row(size) }}
     {% endfor %}
     {{ form_row(form._token) }}
     <td align="right" style="width: 140px;">
         <button class="btn btn-primary" type="submit">
            <i class="glyphicon glyphicon-save"></i>Save
         </button>
     </td>
  </form>
</tr>
CourseGuideRowsizeType
则如下所示:

/**
 * {@inheritdoc}
 */
public function buildForm(FormBuilderInterface $builder, array $options)
{
    $builder
        ->add('channel', 'channel_choice', array(
            'required'    => false
        ))
        ->add('name', 'text')
        ->add('sizes', 'course_guide_row_sizes', array('numColumns' => $options['numColumns']))
    ;
}
/**
 * {@inheritdoc}
 */
public function buildForm(FormBuilderInterface $builder, array $options)
{
    for ($i = 0; $i < $options['numColumns']; $i++) {
        $builder->add($i, 'text', array('required' => 'false'));
    }
    $builder->addEventListener(
        FormEvents::PRE_SUBMIT,
        function (FormEvent $event) use ($options) {
            $form = $event->getForm();
            for ($i = 0; $i < $options['numColumns']; $i++) {
                if (empty($form->get($i)->getData())) {
                    $form->remove($i, 'text');
                }
            }
        }
    );
}
“额外数据”是“大小”字段

我是不是做错了什么


编辑2017年6月:您现在可以使用“允许额外字段”来抑制此错误

由于您将每个
大小定义为
表格行,因此引发错误,例如:

{% for size in form.sizes %}
    {{ form_row(size) }}  // Extra field defined here
 {% endfor %}
如注释中所述,您应该使用或以与之相同的方式创建和使用自定义FormType

这将避免在表单中手动定义额外字段的需要,顺便说一句,可以删除错误

编辑

@nakashu已经提醒目前要使用一种变通方法

只需在
CourseGuideRowType
中添加以下内容即可避免错误:

public function configureOptions(OptionsResolver $resolver)
{
    $resolver->setDefaults(array(
        'allow_extra_fields' => true,
    ));
}

但是,在处理/绑定步骤中,它不会使您免受副作用。

通常,当用户提交的数据的输入多于表单中定义的输入时,会引发错误。Symfony有一个内置类型,它已经完成了您试图手动执行的操作:。这也不是最佳解决方案,但您也可以通过在选项解析器上设置
'allow_extra_fields'=>true
来允许额外字段。注意:Symfony v2中添加了allow_extra_fields选项。6@Munir是的,你说得对。谢谢你的评论。
public function configureOptions(OptionsResolver $resolver)
{
    $resolver->setDefaults(array(
        'allow_extra_fields' => true,
    ));
}