Php 如何自定义Symfony';s控制器

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直接在控制器中编写它。我的问题是,当验证产

我对一个对应于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));
    }
}
(上述验证器从实体搜索字符串中提取)

在我在
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参数还是通过其他方式获得的。希望我现在更清楚了。