如何将 Laravel 错误响应作为 JSON 发送

2022-08-30 18:57:03

我只是移动到laravel 5,并且从HTML页面中的laravel接收错误。像这样:

Sorry, the page you are looking for could not be found.

1/1
NotFoundHttpException in Application.php line 756:
Persona no existe
in Application.php line 756
at Application->abort('404', 'Person doesnt exists', array()) in helpers.php line 

当我使用laravel 4时,一切都工作正常,错误是json格式,这样我就可以解析错误消息并向用户显示消息。json 错误的示例:

{"error":{
"type":"Symfony\\Component\\HttpKernel\\Exception\\NotFoundHttpException",
"message":"Person doesnt exist",
"file":"C:\\xampp\\htdocs\\backend1\\bootstrap\\compiled.php",
"line":768}}

我怎样才能在laravel 5中实现这一点。

对不起我的英语不好,非常感谢。


答案 1

我之前来到这里寻找如何在Laravel的任何地方抛出json异常,答案使我走上了正确的道路。对于任何发现此搜索类似解决方案的人,以下是我在应用范围内实现的方式:

将此代码添加到renderapp/Exceptions/Handler.php

if ($request->ajax() || $request->wantsJson()) {
    return new JsonResponse($e->getMessage(), 422);
}

将以下内容添加到处理对象的方法中:

if ($request->ajax() || $request->wantsJson()) {

    $message = $e->getMessage();
    if (is_object($message)) { $message = $message->toArray(); }

    return new JsonResponse($message, 422);
}

然后在任何您想要的地方使用此通用代码:

throw new \Exception("Custom error message", 422);

它会将ajax请求后抛出的所有错误转换为Json异常,以便以您想要的任何方式使用:-)


答案 2

拉拉维尔 5.1

要在意外异常(如 404、500 403)上保留我的 HTTP 状态代码...

这就是我使用的内容(应用程序/异常/处理程序.php):

 public function render($request, Exception $e)
{
    $error = $this->convertExceptionToResponse($e);
    $response = [];
    if($error->getStatusCode() == 500) {
        $response['error'] = $e->getMessage();
        if(Config::get('app.debug')) {
            $response['trace'] = $e->getTraceAsString();
            $response['code'] = $e->getCode();
        }
    }
    return response()->json($response, $error->getStatusCode());
}

推荐