微信小程序商城全栈开发 作业笔记 (九)全局异常处理

微信小程序商城全栈开发 作业笔记 (九)全局异常处理

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 规则中规定获取的值为空也是一种获取不到资源的异常,所以我们如下编辑控制器的代码:
在这里插入图片描述
加入
在这里插入图片描述
成功返回我们需要的结果
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_43204040/article/details/86567882
今日推荐