我有一个对应于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:"。
我该怎么做才能收到这个?
答案 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循环,将每个错误消息与“|”分开。