php – Symfony 2表单错误“此表单不应包含额外字段.”提交表单时

前端之家收集整理的这篇文章主要介绍了php – Symfony 2表单错误“此表单不应包含额外字段.”提交表单时前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在提交一个表单并在Sylius ResourceController中处理它,该表单提交表单并验证它.

这是原位形式:

  1. <tr>
  2. <form method="post" action="{{ path('backend_course_row_update',{
  3. 'courseeId' : course.id,'id' : row.id }) }}" novalidate>
  4. {{ form_widget(form.channel) }}
  5. {{ form_widget(form.name) }}
  6. {% for size in form.sizes %}
  7. {{ form_row(size) }}
  8. {% endfor %}
  9. {{ form_row(form._token) }}
  10. <td align="right" style="width: 140px;">
  11. <button class="btn btn-primary" type="submit">
  12. <i class="glyphicon glyphicon-save"></i>Save
  13. </button>
  14. </td>
  15. </form>
  16. </tr>

这里的“表单”是一个CourseGuideRowType,如下所示:

  1. /**
  2. * {@inheritdoc}
  3. */
  4. public function buildForm(FormBuilderInterface $builder,array $options)
  5. {
  6. $builder
  7. ->add('channel','channel_choice',array(
  8. 'required' => false
  9. ))
  10. ->add('name','text')
  11. ->add('sizes','course_guide_row_sizes',array('numColumns' => $options['numColumns']))
  12. ;
  13. }

CourseGuideRowSizesType然后如下所示:

  1. /**
  2. * {@inheritdoc}
  3. */
  4. public function buildForm(FormBuilderInterface $builder,array $options)
  5. {
  6. for ($i = 0; $i < $options['numColumns']; $i++) {
  7. $builder->add($i,'text',array('required' => 'false'));
  8. }
  9. $builder->addEventListener(
  10. FormEvents::PRE_SUBMIT,function (FormEvent $event) use ($options) {
  11. $form = $event->getForm();
  12. for ($i = 0; $i < $options['numColumns']; $i++) {
  13. if (empty($form->get($i)->getData())) {
  14. $form->remove($i,'text');
  15. }
  16. }
  17. }
  18. );
  19. }

但是,当我提交表单并转储出这样的错误时:

$form-> submit($request,!$request-> isMethod(‘PATCH’)) – > getErrors()

我明白了:

  1. "This form should not contain extra fields."
  2. #messageParameters: array:1 [▼
  3. "{{ extra_fields }}" => "0","1","2","3","4","5"
  4. ]
  5. -extraData: array:6 [▼
  6. 0 => "36"
  7. 1 => "38"
  8. 2 => "40"
  9. 3 => "42"
  10. 4 => "44"
  11. 5 => "46"
  12. ]

“额外数据”是“大小”字段.

我在这里做了一些明显的错误吗?

编辑2017年6月:您现在可以使用’allow_extra_fields’来抑制此错误. http://symfony.com/doc/current/reference/forms/types/form.html#allow-extra-fields

抛出错误是因为您将每个大小定义为form_row,例如:
  1. {% for size in form.sizes %}
  2. {{ form_row(size) }} // Extra field defined here
  3. {% endfor %}

评论中所述,您应该使用CollectionType或以相同的方式创建和使用自定义FormType.

这将避免在表单中手动定义额外字段的需要,并且BTW会删除错误.

编辑

@nakashu已提醒目前要使用的解决方法.

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

  1. public function configureOptions(OptionsResolver $resolver)
  2. {
  3. $resolver->setDefaults(array(
  4. 'allow_extra_fields' => true,));
  5. }

但它不会让你在处理/绑定步骤中没有副作用.

猜你在找的PHP相关文章