Php Laravel将所有类型的异常作为JSON发送

Php Laravel将所有类型的异常作为JSON发送,php,json,laravel,exception,Php,Json,Laravel,Exception,我正在通过Laravel5.2作为API构建我的应用程序,我需要所有类型的异常都作为json,不管错误代码是什么 我是这样做的: /** * Render an exception into an HTTP response. * * @param \Illuminate\Http\Request $request * @param \Exception $e * @return \Illuminate\Http\Response */ public function rende

我正在通过Laravel5.2作为API构建我的应用程序,我需要所有类型的异常都作为json,不管错误代码是什么

我是这样做的:

/**
 * Render an exception into an HTTP response.
 *
 * @param  \Illuminate\Http\Request $request
 * @param  \Exception $e
 * @return \Illuminate\Http\Response
 */
public function render($request, Exception $e)
{
    return response([
        'success' => false,
        'error' => [
            'code' => $e->getCode(),
            'message' => $e->getMessage(),
        ],
    ], $this->convertExceptionToResponse($e)->getStatusCode());
}
它做了很多事情,但显然这还不够好,因为如果我得到一个404错误,
$e->getMessage
是空的

404错误响应示例:

{
  "success": false,
  "error": {
    "code": 0,
    "message": ""
  }
}
作为json响应异常的最佳方式是什么?

可能是您应该尝试:

public function render($request, Exception $e)
{
    return response(json_encode([
            'success' => false,
            'error' => [
                'code' => $e->getCode(),
                'message' => $e->getMessage(),
            ],
        ]), $this->convertExceptionToResponse($e)->getStatusCode())
        ->header('Content-Type', 'application/json');
}
也许你应该试试:

public function render($request, Exception $e)
{
    return response(json_encode([
            'success' => false,
            'error' => [
                'code' => $e->getCode(),
                'message' => $e->getMessage(),
            ],
        ]), $this->convertExceptionToResponse($e)->getStatusCode())
        ->header('Content-Type', 'application/json');
}

可以用状态的含义作为消息的前缀。检查是否有一个简单的函数可以执行此操作。这些错误只返回错误的含义,而不是错误本身。如果将请求头设置为
Accept
,值为
application/json
,则Laravel将以json发送所有响应。在测试API时,使用Postman之类的工具很容易做到这一点,但当用户使用API时,告诉他们要做的事情显然是多余的。如果您使用Lumen构建API,不管发生什么,它都会用JSON响应。错误代码会返回错误本身。该函数将错误代码转换为人类可读的文本。在需要时可以选择添加错误消息。404错误是不言自明的,并不需要消息(或者不需要消息)。@Joseph,当我试图在POSTMAN中添加此标题时,它仍然向我发送了一个HTML错误。我和拉威尔一起工作。可以在信息的前面加上状态的意思。检查是否有一个简单的函数可以执行此操作。这些错误只返回错误的含义,而不是错误本身。如果将请求头设置为
Accept
,值为
application/json
,则Laravel将以json发送所有响应。在测试API时,使用Postman之类的工具很容易做到这一点,但当用户使用API时,告诉他们要做的事情显然是多余的。如果您使用Lumen构建API,不管发生什么,它都会用JSON响应。错误代码会返回错误本身。该函数将错误代码转换为人类可读的文本。在需要时可以选择添加错误消息。404错误是不言自明的,并不需要消息(或者不需要消息)。@Joseph,当我试图在POSTMAN中添加此标题时,它仍然向我发送了一个HTML错误。我和拉威尔一起工作。