课程名称:微信小程序电商实战
课程章节:AOP 与全局异常处理
课程讲师:7 七月
课程内容:
Exception 基类
class BaseException { // HTTP 状态码 public $code = 400; // 错误具体信息 public $msg = 'invalid parameters'; // 自定义错误码 public $errorCode = 999; public $shouldToClient = true; /** * 构造函数,接收一个关联数组 * @param array $params 关联数组只应包含code、msg和errorCode,且不应该是空值 */ public function __construct($params=[]) { if(!is_array($params)){ return; } if(array_key_exists('code',$params)){ $this->code = $params['code']; } if(array_key_exists('msg',$params)){ $this->msg = $params['msg']; } if(array_key_exists('errorCode',$params)){ $this->errorCode = $params['errorCode']; } } }
Exception 子类
class BannerMissException extends BaseException { public $code = 404; public $msg = '参数错误'; public $errorCode = 40000; }
Handle 异常处理类
class ExceptionHandler extends Handle { private $code; private $msg; private $errorCode; public function render(Exception $ex) { if($e instanceof BaseException) { //如果是自定义异常,则控制http状态码,不需要记录日志 //因为这些通常是因为客户端传递参数错误或者是用户请求造成的异常 //不应当记录日志 $this->code = $e->code; $this->msg = $e->msg; $this->errorCode = $e->errorCode; } else { // 如果是服务器未处理的异常,将http状态码设置为500,并记录日志 if(config('app_debug')){ // 调试状态下需要显示TP默认的异常页面,因为TP的默认页面 // 很容易看出问题 return parent::render($e); } $this->code = 500; $this->msg = 'sorry, we make a mistake. (^o^)Y'; $this->errorCode = 999; $this->recordErrorLog($e); } $request = Request::instance(); $result = [ 'msg' => $this->msg, 'error_code' => $this->errorCode, 'request_url' => $request = $request->url() ]; return json($result, $this->code); } }
config.php 配置
exception_handle => 'app\lib\exception\ExceptionHandler'
ParameterException 通用参数类异常错误
class ParameterException extends BaseException { public $code = 400; public $errorCode = 10000; public $msg = "invalid parameters"; }
课程收获: