**一. 异常的分类:**
**1. 由于用户行为导致的异常(没有通过验证器,没查询到结果)**
通常不需要记录日志 需要向用户返回具体信息
**2. 服务器自身异常(代码错误, 调用外部接口错误)**
通常只记录日志 不向客户端返回具体原因
全局异常处理类[配置文件中指向该文件]
~~~
class ExceptionHandler extends Handle {
private $code;
private $msg;
private $errCode;
//需要返回客户端当前请求的url路径
/**
* @param Exception $e
* @return \think\Response|void
*/
public function render(\Exception $e)
{
// 自定义的异常类,继承BaseException
if($e instanceof BaseException){
$this->code=$e->code;
$this->msg=$e->msg;
$this->errCode=$e->errCode;
}else{
// 系统的异常,判断是不是调试模式:是,显示tp5的异常,否则显示封装接口的异常
if(config('app.app_debug')){
//使用tp5默认的错误提示
return parent::render($e);
}else{
$this->code=500;
$this->msg='服务器内部错误';
$this->errCode=999;
//真是的错误写入日志
// echo($e->getMessage());
Log::record($e->getMessage(),'error');
}
}
//返回错误数据
$url=request()->url();
$result=[
'msg'=>$this->msg,
'errCode'=>$this->errCode,
'url'=>$url
];
return json($result,$this->code);
}
}
~~~