首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Symfony2 :如何在将请求绑定到表单后获取表单验证错误

Symfony2 :如何在将请求绑定到表单后获取表单验证错误
EN

Stack Overflow用户
提问于 2011-08-08 14:58:58
回答 8查看 224K关注 0票数 115

下面是我的saveAction代码(表单将数据传递到的位置)

代码语言:javascript
复制
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,我如何获取错误

EN

回答 8

Stack Overflow用户

发布于 2011-11-22 01:52:23

下面是对我有效的解决方案。此函数位于一个控制器中,它将返回一个结构化数组,其中包含所有错误消息和导致错误消息的字段。

Symfony 2.0:

代码语言:javascript
复制
private function getErrorMessages(\Symfony\Component\Form\Form $form) {
    $errors = array();
    foreach ($form->getErrors() as $key => $error) {
        $template = $error->getMessageTemplate();
        $parameters = $error->getMessageParameters();

        foreach($parameters as $var => $value){
            $template = str_replace($var, $value, $template);
        }

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

    return $errors;
}

Symfony 2.1和更高版本:

代码语言:javascript
复制
private function getErrorMessages(\Symfony\Component\Form\Form $form) {      
    $errors = array();

    if ($form->hasChildren()) {
        foreach ($form->getChildren() as $child) {
            if (!$child->isValid()) {
                $errors[$child->getName()] = $this->getErrorMessages($child);
            }
        }
    } else {
        foreach ($form->getErrors() as $key => $error) {
            $errors[] = $error->getMessage();
        }   
    }

    return $errors;
}
票数 47
EN

Stack Overflow用户

发布于 2012-09-20 23:38:12

对于我的闪光消息,我对$form->getErrorsAsString()很满意

编辑(来自Benji_X80):对于SF3,请使用$form->getErrors(true, false);

票数 16
EN

Stack Overflow用户

发布于 2013-03-29 06:49:23

symfony 2.1和更新版本的函数,没有任何不推荐使用的函数:

代码语言:javascript
复制
/**
 * @param \Symfony\Component\Form\Form $form
 *
 * @return array
 */
private function getErrorMessages(\Symfony\Component\Form\Form $form)
{
    $errors = array();

    if ($form->count() > 0) {
        foreach ($form->all() as $child) {
            /**
             * @var \Symfony\Component\Form\Form $child
             */
            if (!$child->isValid()) {
                $errors[$child->getName()] = $this->getErrorMessages($child);
            }
        }
    } else {
        /**
         * @var \Symfony\Component\Form\FormError $error
         */
        foreach ($form->getErrors() as $key => $error) {
            $errors[] = $error->getMessage();
        }
    }

    return $errors;
}
票数 15
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6978723

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档