php 自定义抛出异常,TP6自定义抛出异常实例

本文介绍了如何通过自定义异常类和处理机制,提高代码可读性和错误处理效率,通过实例展示了如何在ThinkPHP6中创建异常类,捕获并返回标准化的JSON错误信息。

优势:

1.异常处理通常是防止未知错误产生所采取的处理措施。异常处理的好处是不用再绞尽脑汁去考虑各种错误,这为处理某一类错误提供了一个很有效的方法,使编程效率大大提高。

2.自定义抛出异常的好处,避免if else嵌套,增强代码可读性,返回给前端一个简化的json信息,进行相应处理。

TP6实例

在app目录下新建lib\exception文件夹

在文件夹下新建ExceptionHandle.php,BaseException.php

ExceptionHandle.php代码,重写render

namespace app\lib\exception;

use think\Exception;

use think\exception\Handle;

use think\Log;

use think\Response;

use Throwable;

/**

* 应用异常处理类

*/

class ExceptionHandle extends Handle

{

public $httpStatus =500 ;

private $code;

private $msg;

private $errorCode;

public function render($request, Throwable $e): Response

{

if($e instanceof BaseException){

$this->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

namespace app\lib\exception;

use think\Exception;

use Throwable;

class BaseException extends Exception

{

public $code = 400;

public $msg = 'invalid parameters';

public $errorCode = 999;

public $paramsEnum = [];

public $shouldToClient = true;

public function __construct($params=[], $type=0)

{

if(!is_array($params)){

return;

}

if(array_key_exists('code',$params)){

$this->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

解决方法如下代码

use app\lib\exception\ExceptionHandle;

use app\Request;

// 容器Provider定义文件

return [

'think\Request' => Request::class,

'think\exception\Handle' => ExceptionHandle::class,

];

2、在app\lib\exception下新建异常处理类,例:

新建ActivityException.php代码如下

namespace app\lib\exception;

class ActivityException extends BaseException{

public $code = 400;

public $msg = 'activity is error';

public $errorCode = 10700; // 10700-10799

public $paramsEnum = [

1 => ['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);

结果

1c2a1efb7f08

返回Json信息

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值