Php 如何自定义Symfony';s控制器
我对一个对应于symfony2编码页面的url进行了ajax调用,在该页面中,我对传递给该页面的一个数据进行了验证 我的验证器:Php 如何自定义Symfony';s控制器,php,ajax,validation,symfony,Php,Ajax,Validation,Symfony,我对一个对应于symfony2编码页面的url进行了ajax调用,在该页面中,我对传递给该页面的一个数据进行了验证 我的验证器: /** * @Assert\Regex(pattern="/^(https?:\/\/)/", message="wrong_string", groups={"searchnow_url_post"}) ... */ public $searchstring; 当我构建ajax调用的答案时,我使用JsonResponse直接在控制器中编写它。我的问题是,当验证产
/**
* @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));
}
}
(上述验证器从实体搜索字符串中提取)
在我在error\u msg
中收到的javascript中:
“对象(MemoBundle\Entity\Searchstring)。Searchstring:错误的字符串。”
但这并不好
我希望在error\u msg
中只接收消息“error string”,而不接收“Object(MemoBundle\Entity\Searchstring)。Searchstring:”
我如何才能收到此信息?您还没有显示任何负责生成输出本身的代码。正如您所看到的,您的错误消息按预期显示 在某个地方调用表单对象 $form->getErrors(…)
这是相关的块。我找到了解决方案。这个问题很简单,但作为Symfony2的新手,我有一些困难来集中我的问题 我需要使用ConstraintViolation对象的getMessage()方法,其中从validator对象的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循环,用“|”分隔每个错误消息,如您所见,我添加了整个控制器代码。我的观点是,我不想要错误消息“Object(MemoBundle\Entity\Searchstring)的部分。Searchstring:”但我想要一个完全定制的错误消息。我是Symfony2的新手,所以我不知道我想要的是通过验证器中的message参数还是通过其他方式获得的。希望我现在更清楚了。