TP6自定义抛出异常实例

优势:

1.异常处理通常是防止未知错误产生所采取的处理措施。异常处理的好处是不用再绞尽脑汁去考虑各种错误,这为处理某一类错误提供了一个很有效的方法,使编程效率大大提高。
2.自定义抛出异常的好处,避免if else嵌套,增强代码可读性,返回给前端一个简化的json信息,进行相应处理。

TP6实例
在app目录下新建lib\exception文件夹
在文件夹下新建ExceptionHandle.php,BaseException.php

ExceptionHandle.php代码,重写render

code = $e->code;
            $this->msg = $e->msg;
            $this->errorCode = $e->errorCode;
        }else{
            if(env('APP_DEBUG', '0')){
                return parent::render($request, $e);
            }else{
                $this->code =500;
                $this->msg='服务器错误,请联系客服或者稍后再试';
                $this->errorCode=999;
                $this->recordErrorLog($e);
            }
        }
        $result = [
            'error_code' => $this->errorCode,
            'msg'  => $this->msg,
            'request_url' => request()->url()
        ];

        return json($result, $this->code);
    }
    //记录日志
    public function recordErrorLog(Exception $e){
        Log::record($e->getMessage(),'error');
    }
}

BaseException.php

code = $params['code'];
        }
        if(array_key_exists('msg',$params)){
            $this->msg = $params['msg'];
        }
        if(array_key_exists('errorCode',$params)){
            $this->errorCode = $params['errorCode'];
        }

        if( $type ){
            $params = $this->paramsEnum[ $type ];
            $this->errorCode = $params['error_code'];
            $this->msg = $params['msg'];
        }
    }
}

使用

1、在app目录下的provider.php文件中绑定异常处理类,
坑1:如果按照开发手册来写的话,总是不会走自定义异常,报错500
解决方法如下代码

 Request::class,
    'think\exception\Handle' => ExceptionHandle::class,
];

2、在app\lib\exception下新建异常处理类,例:
新建ActivityException.php代码如下

 ['error_code'=>10701, 'msg'=>'活动添加失败,请重试~'],
        2 => ['error_code'=>10702, 'msg'=>'活动添加失败,请重试'],
        3 => ['error_code'=>10703, 'msg'=>'票据规格添加,请重试'],
        4 => ['error_code'=>10704, 'msg'=>'活动不存在'],
        5 => ['error_code'=>10705, 'msg'=>'不可跨账号操作~'],
        6 => ['error_code'=>10706, 'msg'=>'活动不存在或已下架~'],
        7 => ['error_code'=>10707, 'msg'=>'票据不存在~'],
        8 => ['error_code'=>10708, 'msg'=>'该票据已售罄,请更换其他规格~'],
        9 => ['error_code'=>10709, 'msg'=>'活动名额已满,亲下次早来哦~'],
        10 => ['error_code'=>10710, 'msg'=>'下单失败,请重试~']
    ];

    public function __construct($params=[],$type=0)
    {
        parent::__construct($params, $type);
    }
}

3、使用时引入ActivityException,可使用定义好的抛出异常类型,也可以自定义抛出异常信息

throw new ActivityException([],1);

结果

返回Json信息

你可能感兴趣的:(TP6自定义抛出异常实例)