微信小程序商城全栈开发 作业笔记 (九)全局异常处理
1.自定义异常信息
首先,新建一个Banner模块
用as重命名为BannerModel,接收getBannerbyID返回的结果
写一个测试代码,如1/0,抛出异常
浏览器测试一下
返回到结果客户端不清楚,试一试关闭调试模式
打开config.php,找到app_debug改为false,刷新
好吧,也不行,我们自己定义一个统一的异常返回消息
测试一下
异常分类
2.全局异常处理
定义BaseException类代表 客户端异常
需要对TP5默认异常进行覆盖,重写
新建一个ExceptionHandler类返回错误
新建一个BaseException基类接收错误信息,统一描述
编写子类
父类 (子类错误会将其覆盖)
ExceptionHandler中返回错误给客户端
需要改一下配置文件
成功返回我们设置的错误
修改ExceptionHandler中 render 方法:
<?php
namespace app\lib\exception;
use Exception;
use think\exception\Handle;
use think\Request;
class ExceptionHandler extends Handle
{
private $code;
private $msg;
private $errorcode;
//需要返回URL路径
public function render(Exception $e)//所有的异常渲染,决定返回到客户端的形式
{
if($e instanceof BaseException){//如果是自定义异常
$this->code=$e->code;
$this->msg=$e->msg;
$this->errorcode=$e->errorcode;
}
else{
$this->code=500;
$this->msg='服务器内部错误';
$this->errorcode=999;
}
$request=Request::instance();
$result=[
'msg'=>$this->msg,
'error_code'=>$this->errorcode,
'request_url'=>$request->url()
];
return json($result,$this->code);
}
运行
不会报出 1/ 0 错误
测试 BannerMissException,
将 model\Banner 中的 1/0 删掉,改为:
判断$banner 是否为空,因为 RESTFull 规则中规定获取的值为空也是一种获取不到资源的异常,所以我们如下编辑控制器的代码:
加入
成功返回我们需要的结果