在Symfony2控制器中处理Ajax中的错误

时间:2012-09-12 10:15:16

标签: symfony symfony-2.1

我正在尝试处理Ajax中的错误。为此,我只是想在Symfony中重现这个SO question

$.ajaxSetup({
    error: function(xhr){
        alert('Request Status: ' + xhr.status + ' Status Text: ' + xhr.statusText + ' ' + xhr.responseText);
    }
});

但是我无法弄清楚控制器中的代码在Symfony2中会是什么样子来触发header('HTTP/1.0 419 Custom Error');。是否可以附加个人消息,例如You are not allowed to delete this post。我是否也需要发送JSON响应?

如果有人熟悉这一点,我将非常感谢你的帮助。

非常感谢

1 个答案:

答案 0 :(得分:14)

在您的操作中,您可以返回Symfony\Component\HttpFoundation\Response对象,您可以使用setStatusCode方法或第二个构造函数参数来设置HTTP状态代码。当然,如果您希望:

,也可以将响应的内容作为JSON(或XML)返回
public function ajaxAction()
{
    $content = json_encode(array('message' => 'You are not allowed to delete this post'));
    return new Response($content, 419);
}

public function ajaxAction()
{
    $response = new Response();
    $response->setContent(json_encode(array('message' => 'You are not allowed to delete this post'));
    $response->setStatusCode(419);
    return $response;
}

更新:如果您使用的是Symfony 2.1,则可以返回Symfony\Component\HttpFoundation\JsonResponse的实例(感谢该软件提示)。使用此类的优点是它还将发送正确的Content-type标头。例如:

public function ajaxAction()
{
    return new JsonResponse(array('message' => ''), 419);
}