框架在出现异常(非法路由、程序执行异常、非法请求方式等非正常请求)时,我们希望框架能在某处进行统一处理,从而达到统一的结构响应,不至于时而返回错误的html时而返回捕获异常的json对象!
思路:框架提供了这么一个类(app/Exceptions/Handler.php),在render方法中我们编写捕获异常需要处理的逻辑
//所有异常的处理归口处(可以统一封装异常处理的操作)
public function render($request, Throwable $e)
{
$data = function() use ($request, $e){
try {
$routes = Route::getRoutes();
$routes->match($request);//校验当前路由是否存在
return [
'code'=>($e->getCode() != 0)?$e->getCode():SystemCode::SYSTEM_ERROR,
'message'=>'文件【'.$e->getFile().'】的第'.$e->getLine().'行出现异常,大致是:【'.($e->getMessage() ?? "error!").'】',
'data'=>[],
];
}catch (NotFoundHttpException $ex){
return ['code'=>SystemCode::SYSTEM_ERROR_NO_RESOURCE,'message'=>SystemMessage::SYSTEM_ERROR_NO_RESOURCE, 'data'=>[]];
}catch (\Exception $excep){
return [
'code'=>($excep->getCode() != 0)?$excep->getCode():SystemCode::SYSTEM_ERROR,
'message'=>$excep->getMessage() ?? "error!",
'data'=>[],
];
}
};
//return response()->make(json_encode($data(),256));//返回json字符串用这个方法
return response()->json($data());//返回json对象用这个方法
}
这里我们捕获了异常,并返回了结构统一的json对象