Thinkphp8 配置异常全局捕捉处理

封装异常处理

配置

先创建自己的 BaseException 类
<?php

namespace app\exception;

use app\enums\StatusCodeEnum;

class BaseException extends \Exception
{
    public $success = false;
    public $status = 1;
    public $statusInfo = [
        "message" => "服务器正忙",
    ];
    // 这里是我自己设置的一个状态码类,StatusCodeEnum::INTERNAL_SERVER_ERROR = 500
    public $httpStatus = StatusCodeEnum::INTERNAL_SERVER_ERROR;
    public function __construct($message = "", $code = 0, $httpStatus = 500)
    {
        if (!is_numeric($code)) {
            $code = 0;
        }
        if (!is_numeric($httpStatus)) {
            $httpStatus = 500;
        }
        $this->httpStatus = $httpStatus;
        $this->status = $code;
        $this->statusInfo = [
            "message" => $message,
        ];
        parent::__construct($message, $code);
    }
    // 这里也可以写在公共方法中脱离出来
    public function getError()
    {
        return [
            "success" => $this->success,
            "status" => $this->status,
            "statusInfo" => $this->statusInfo,
        ];
    }
}

再写一个类进行继承这个类

没有需要不用修改任何东西,继承的父类已经够用了

<?php

namespace app\exception\AppException;

use app\exception\BaseException;
// 我这个是一个参数报错异常
class ParameterException extends BaseException
{

}

使用

在UserMiddle中间件中使用
<?php

namespace app\middleware;

// 以上代码省略。。。。。。

class UserMiddle
{

    public function handle($request, \Closure $next)
    {

        // 获取请求参数
        $params = $request->param();

        try {
            // 验证用户信息,指定验证类为UserValidate,验证场景为login,并检查参数是否通过验证
            validate(UserValidate::class)->scene("login")->check($params);
        } catch (ValidateException $e) {
            // 验证失败,抛出异常,返回错误信息
			// 在这里抛出我们自己配置的类,不写参数会有默认的参数
            throw new ParameterException($e->getMessage(), 1,500);
        }

        return $next($request);
    }
}
配置ExceptionHandle类异常处理
<?php
namespace app;

// 以上代码省略。。。。。。

/**
 * 应用异常处理类
 */
class ExceptionHandle extends Handle
{
    // 以上代码省略。。。。。。
    public function render($request, Throwable $e): Response
    {
        // 添加自定义异常处理机制,判断类型,自己可以灵活搭配
        if($e instanceof ParameterException){
            return json($e->getError(),$e->httpStatus);
        }

        // 其他错误交给系统处理
        return parent::render($request, $e);
    }
}
效果图

在这里插入图片描述


  • 11
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值