表单 – Symfony2:我的表单从isValid()返回false,但是从唯一约束条件返回getErrors()的空数组

前端之家收集整理的这篇文章主要介绍了表单 – Symfony2:我的表单从isValid()返回false,但是从唯一约束条件返回getErrors()的空数组前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个客户实体,它只有一个唯一的电子邮件字段.我正在尝试编辑客户的电子邮件,验证工作正常.但是我在控制器中有这个: @H_404_2@public function updateAction(Request $request,$id) { $em = $this->getDoctrine()->getManager(); $entity = $em->getRepository('AcmeDemoBundle:Customer')->find($id); if (!$entity) { throw $this->createNotFoundException('Unable to find Customer entity.'); } $editForm = $this->createForm(new CustomerType(),$entity); $editForm->bind($request); if ($editForm->isValid()) { $em->persist($entity); $em->flush(); return $this->redirect($this->generateUrl('ticket_result')); } var_dump($editForm->getErrors()); return $this->render('AcmeDemoBundle:Customer:edit.html.twig',array( 'entity' => $entity,'edit_form' => $editForm->createView(),)); }

var_dump返回一个空数组,但验证器设置唯一的错误,$editForm-> isValid()返回false.有没有办法在验证期间检查控制器中的具体错误,还可以解释为什么它返回一个空的错误数组?基本上,如果出现这个错误,我想提供“merge”选项.

编辑:这里是formtype:

@H_404_2@namespace Acme\DemoBundle\Form; use Symfony\Component\Form\AbstractType; use Symfony\Component\Form\FormBuilderInterface; use Symfony\Component\OptionsResolver\OptionsResolverInterface; class CustomerType extends AbstractType { public function buildForm(FormBuilderInterface $builder,array $options) { $builder ->add('email','email',array('required'=>true)) ; } public function setDefaultOptions(OptionsResolverInterface $resolver) { $resolver->setDefaults(array( 'data_class' => 'Acme\DemoBundle\Entity\Customer','cascade_validation' => true,)); } public function getName() { return 'acme_demobundle_customertype'; } }

和树枝模板:

@H_404_2@{% extends 'AcmeDemoBundle::layout.html.twig' %} {% block body -%} <h1>Customer edit</h1> <form action="{{ path('customer_update',{ 'id': entity.id }) }}" method="post" {{ form_enctype(edit_form) }}> <input type="hidden" name="_method" value="PUT" /> {{ form_widget(edit_form) }} <p> <button type="submit">Edit</button> </p> </form> {% endblock %}

这是我的验证:

@H_404_2@Acme\DemoBundle\Entity\Customer: constraints: - Symfony\Bridge\Doctrine\Validator\Constraints\UniqueEntity: fields: email message: "A customer under that email address already exists" properties: email: - Email: ~

解决方法

为了调试,您可以使用$form-> getErrorsAsString()而不是$form-> getErrors(),如果您使用Symfony 2. *

起价为this answer

$form->getErrorsAsString() should only be used to debug the form…it
will contain the errors of each child elements which is not the case
of $form->getErrors().

更新1:

“使用更新的Symfony版本,您必须使用$form-> getErrors(true,false);而第一个参数对应于深度和第二个平坦化(参见@Roubi的注释)

原文链接:https://www.f2er.com/html/229922.html

猜你在找的HTML相关文章