在laravel中默认返回的异常是html的形式展现在页面上面,当我们写api接口时候希望返回json给前端希望能够不会出现神奇的bug。
找到文件Exceptions\Handler.php重写render方法
重写代码
/**
* 重写render
* @param $request
* @param Throwable $e
* @return \Illuminate\Http\JsonResponse|\Illuminate\Http\Response|\Symfony\Component\HttpFoundation\Response|void
* @throws Throwable
*/
public function render($request, Throwable $e)
{
if (!$request->is('api/*')) {
return parent::render($request, $e);
}
$error = $this->convertExceptionToResponse($e);
$api_e = FlattenException::create($e);
$debug['line'] = $api_e->getLine();
$debug['file'] = $api_e->getFile();
$debug['class'] = $api_e->getClass();
$debug['trace'] = $api_e->getTrace();
return response()->json([
'status' => false,
'code'=>$error->getStatusCode(),
'message'=>$api_e->getMessage(),
'data'=>$debug,
], $error->getStatusCode());
}
返回内容
{
"status": false,
"code": 404,
"message": "",
"data": {
"line": 43,
"file": "/project_path/vendor/laravel/framework/src/Illuminate/Routing/AbstractRouteCollection.php",
"class": "Symfony\\Component\\HttpKernel\\Exception\\NotFoundHttpException",
"trace": [
{
"namespace": "",
"short_class": "",
"class": "",
"type": "",
"function": "",
"file": "/project_path/vendor/laravel/framework/src/Illuminate/Routing/AbstractRouteCollection.php",
"line": 43,
"args": []
},
{
"namespace": "Illuminate\\Routing",
"short_class": "AbstractRouteCollection",
"class": "Illuminate\\Routing\\AbstractRouteCollection",
"type": "->",
"function": "handleMatchedRoute",
"file": "/project_path/vendor/laravel/framework/src/Illuminate/Routing/RouteCollection.php",
"line": 162,
"args": [
[
"object",
"Illuminate\\Http\\Request"
],
[
"null",
null
]
]
},
{
"namespace": "Illuminate\\Routing",
"short_class": "RouteCollection",
"class": "Illuminate\\Routing\\RouteCollection",
"type": "->",
"function": "match",
"file": "/project_path/vendor/laravel/framework/src/Illuminate/Routing/Router.php",
"line": 673,
"args": [
[
"object",
"Illuminate\\Http\\Request"
]
]
},
{
"namespace": "Illuminate\\Routing",
"short_class": "Router",
"class": "Illuminate\\Routing\\Router",
"type": "->",
"function": "findRoute",
"file": "/project_path/vendor/laravel/framework/src/Illuminate/Routing/Router.php",
"line": 662,
"args": [
[