如何在Symfony控制器中自定义验证错误消息

时间:2015-05-08 17:51:48

标签: php ajax validation symfony

我有一个对应于symfony2编码页面的URL的ajax调用,在该页面中我验证了传递给页面的一个数据。

我的验证员:

/**
* @Assert\Regex(pattern="/^(https?:\/\/)/", message="wrong_string", groups={"searchnow_url_post"})
...
*/
public $searchstring; 

当我构建ajax调用的答案时,我使用JsonResponse直接在控制器中编写它。我的问题是当验证产生错误时我做了类似的事情:

return new JsonResponse(array(
    'status' => 401,
    'error_msg'=> (string)$errors   
)); 

更确切地说,整个控制器是:

class BaseController extends Controller
{
public function searchnow_url_postAction(){
    $input_string=$_REQUEST['src'];

    $search_string= new Searchstring();
    $search_string->setSearchstring($input_string);

    //qui devo usare il validation group "search_now"
    $validator = $this->get('validator');
    $errors = $validator->validate($search_string, null, array('searchnow_url_post'));
    if (count($errors) > 0){
        $status=401;
        return new JsonResponse(
            array('status' => 401,
                'error_msg'=> (string) $errors  
        ));
    }
    else
        return new JsonResponse(array('status' => 200));
    }
}

(以上验证器是从实体Searchstring中提取的)

我在error_msg收到的javascript:

  

" Object(MemoBundle \ Entity \ Searchstring).searchstring:字符串错误。"

但这并不好。

我希望在error_msg中仅收到消息"错误的字符串"没有"对象(MemoBundle \ Entity \ Searchstring).searchstring:"。

我该怎么做才能收到这个?

2 个答案:

答案 0 :(得分:0)

您尚未显示任何负责生成输出的代码。如您所见,您的错误消息显示为预期

您正在调用表单对象,

$ form-> getErrors(...)

这是相关的块。

答案 1 :(得分:0)

我有解决方案。这个问题非常简单,但对Symfony2来说是新手,我在解决问题方面遇到了一些困难。

我需要使用ConstraintViolation对象的getMessage()方法,其中从验证器对象的validate方法返回此对象的列表。

要编写一些代码行,上面的控制器现在听起来像这样:

public function searchnow_url_postAction(){
    $input_string=$_REQUEST['src'];

    $search_string= new Searchstring();
    $search_string->setSearchstring($input_string);

    //qui devo usare il validation group "search_now"
    $validator = $this->get('validator');
    $errors = $validator->validate($search_string, null, array('searchnow_url_post'));
    if (count($errors) > 0){

        $error_ret_msg='';
        foreach ($errors as $error){
            $error_ret_msg.=$error->getMessage()."|";
        }

        $status=401;
        return new JsonResponse(
            array('status' => 401,
                'error_msg'=> $error_ret_msg,
        ));
    }
    else
        return new JsonResponse(array('status' => 200));
}

在相同变量违反了更多验证限制的情况下,我使用了foreach循环,将每个错误消息与“|”分开。