thinkphp5-重写tp5的异常处理类中的render方法

1,重写render方法的测试
  • tp5中出现异常如果一直向上抛,最后会被框架自己的全局异常处理类Handle类的render方法捕获。所以要自定义tp5的全局异常处理就要重写Handle类的render方法。
  1. 新建一个ExceptionHandler.php继承于Handle类。
    (新建lib目录与api目录同级是因为一旦自定义的全局异常处理层构建完成之后,lib目录下的exception就像一个类库一样,不仅api控制器能调用它,其他的也可以调用它。)
    在这里插入图片描述
<?php
namespace app\lib\exception;

use think\Exception;
use think\exception\Handle;

class ExceptionHandler extends Handle {
    public function render(Exception $ex){
        return json('1235566');
    }
}

重点来了:重写了tp5的Handle类的render方法,一定一定要去config.php里面更改一下配置
在这里插入图片描述

  1. 现在重写render方法返回123456做个测试,看是不是向上抛出的异常都会被render方法处理。
    首先来看错误异常的流向,在model层banner.php中模拟操作数据库出现异常并向上抛出。
    在这里插入图片描述
    在控制器层调用model中的方法,并没有对方法做处理,这样全局异常就会捕获这个异常,那么render方法就会执行
    在这里插入图片描述
    render方法执行
    在这里插入图片描述
2,根据自定义的异常的类型来完成render方法

自己定义的异常分类(不同的业务需求会有所不同)

  1. 首先构建由于用户的行为导致的异常处理
    在lib目录下新建一个BaseException类来初始化通一描述信息,并且继承于exception基类。
    在这里插入图片描述

  2. 第二步:自定义对应的控制器异常类并继承于BaseException并定义异常描述信息。
    在这里插入图片描述

  3. 完成ExceptionHandler类中的render方法
    (render方法来判断是自己抛出的自定义异常,还是服务器的内部异常并做相应的处理)

<?php
namespace app\lib\exception;
use think\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) {
       		//BaseException是自定义异常的基类
            //如果是自定义的异常,就返回自定义异常下的异常信息
            $this->code = $e->code;
            $this->msg = $e->msg;
            $this->errorCode = $e->errorCode;

        } else {
      	  //否则就是服务器的内部错误
            $this->code = 500;
            $this->msg = "服务器内部错误,不想告诉你";
            $this->errorCode = 999;
        }
        
        //还要返回请求的url地址
        $request = Request::instance();
        $result = [
            'msg' => $this->msg,
            'error_code' => $this->errorCode,
            'request_url' => $request->url()
        ];
        return json($result, $this->code);
    }
}
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值