Symfony 2:如何在将请求绑定到表单后获得表单验证错误?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (34)

这是我的saveAction代码(表单将数据传递给)

public function saveAction()
{
    $user = OBUser();

    $form = $this->createForm(new OBUserType(), $user);

    if ($this->request->getMethod() == 'POST')
    {
        $form->bindRequest($this->request);
        if ($form->isValid())
            return $this->redirect($this->generateUrl('success_page'));
        else
            return $this->redirect($this->generateUrl('registration_form'));
    } else
        return new Response();
}

我的问题是:如果$form->isValid()返回,我如何得到错误false

提问于
用户回答回答于

你有两种可能的方法:

  • 不要在错误和显示时重定向用户。{{ form_errors(form) }}模板文件
  • 访问错误数组$form->getErrors()
用户回答回答于

Symfony 2.3/2.4:

这个函数得到了所有的错误。表单上的那些,如“CSRF令牌无效”。请尝试重新提交表单。“以及窗体子表上没有出现冒泡错误的其他错误。

private function getErrorMessages(\Symfony\Component\Form\Form $form) {
    $errors = array();

    foreach ($form->getErrors() as $key => $error) {
        if ($form->isRoot()) {
            $errors['#'][] = $error->getMessage();
        } else {
            $errors[] = $error->getMessage();
        }
    }

    foreach ($form->all() as $child) {
        if (!$child->isValid()) {
            $errors[$child->getName()] = $this->getErrorMessages($child);
        }
    }

    return $errors;
}

若要将所有错误作为字符串获取:

$string = var_export($this->getErrorMessages($form), true);

Symfony 2.5/3.0:

$string = (string) $form->getErrors(true, false);

扫码关注云+社区