美文网首页
ThinkPHP6.0异常处理

ThinkPHP6.0异常处理

作者: 皮蛋馅儿 | 来源:发表于2020-04-04 15:36 被阅读0次

    在实际开发过程中,我们可能遇到很多不可预知的异常,比如未定义的变量等,api接口定义了统一的数据结构返回,如果直接抛出异常,前端可能识别不了导致系统崩溃,所以我们要针对异常进行处理,保证代码健壮性。

    1、在\app\ExceptionHandle.php的render方法可以直接处理返回异常格式

    public function render($request, Throwable $e): Response
    {
        // 添加自定义异常处理机制
        $result = [
            'code' => 0,
            'message' => $e->getMessage(),
            'data' => []
        ];
        return json($result, 400);
    }
    

    2、以上方法是针对公共异常处理,如果只是想对多应用模块下的api模块进行这种格式的异常返回,可以通过以下方法:
    在api模块下新建exception文件夹,并且在exception下面创建Http.php文件,代码如下:

    <?php
    
    namespace app\api\exception;
    
    use think\exception\Handle;
    use think\Response;
    use Throwable;
    
    /**
     * 不可预知的异常处理
     * Class Http
     * @package app\api\exception
     */
    class Http extends Handle
    {
        public $httpStatus = 500;
    
        public function render($request, Throwable $e): Response
        {
            // http状态码获取,比如throw new \think\exception\HttpException(400, '无效请求')设置了状态码
            if (method_exists($e, 'getStatusCode')) {
                $httpStatus = $e->getStatusCode();
            } else {
                $httpStatus = $this->httpStatus;
            }
    
            // 添加自定义异常处理机制
            $result = [
                'code' => 0,
                'message' => $e->getMessage(),
                'data' => []
            ];
            return json($result, $httpStatus);
        }
    }
    

    在\app\api下新建provider.php,并添加如下代码

    <?php
    
    use app\api\exception\Http;
    
    // 容器Provider定义文件
    return [
        'think\exception\Handle' => Http::class,
    ];
    

    测试未定义变量异常:
    在\app\api\controller\Index.php,添加代码

    <?php
    
    namespace app\api\controller;
    
    use app\BaseController;
    
    class Index extends BaseController
    {
        public function index()
        {
            echo $a;
        }
    }
    

    返回:

    {"code":0,"message":"Undefined variable: a","data":[]}
    

    测试抛出异常:

    <?php
    
    namespace app\api\controller;
    
    use app\BaseController;
    
    class Index extends BaseController
    {
        public function index()
        {
            throw new \think\exception\HttpException(400, '无效请求');
        }
    }
    

    返回:

    {"code":0,"message":"无效请求","data":[]}
    

    并且F12调试模式下,可以看到相应的HTTP状态码也发生变化

    加我微信公众号:\color{red}{皮蛋馅儿},一起学习哦~

    相关文章

      网友评论

          本文标题:ThinkPHP6.0异常处理

          本文链接:https://www.haomeiwen.com/subject/xgrjphtx.html