thinkphp5.1全局异常类封装

简介: thinkphp5.1全局异常类封装
1.thinkphp是很容易来写接口的,下面就来一个异常类的封装,首先我们需要在项目application里创建lib文件夹,如下图所示。

2.写BaseException的代码
<?php
namespace app\lib\exception;
use Exception;
class BaseException extends Exception
{
  public $code=400;
  public $msg='异常';
  public $errorCode=999;
  public function __construct($params=[]){
    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'];
  }
}
3.写ExceptionHandler的代码
<?php
namespace app\lib\exception;
use Exception;
use think\exception\Handle;
/**
* PHP异常处理类
*/
class ExceptionHandler extends Handle
{
  public $code;
  public $msg;
  public $errorCode;
  public function render(Exception $e)
  {
    if($e instanceof BaseException){
      $this->code = $e->code;
      $this->msg = $e->msg;
      $this->errorCode = $e->errorCode;
    }else{
      //debug开启,显示默认异常
      if(config('app.app_debug')) return parent::render($e);
      $this->code = 500;
      $this->msg = '服务器异常';
      $this->errorCode = 999;
    }
    $res=[
      'code'=>$this->code,
      'msg'=>$this->msg,
      'errorCode'=>$this->errorCode
    ];
    return json($res,$this->code);
  }
}
?>
4.接下来,我们引用,这里我是在Index.php中引用的,如下,代码
<?php
namespace app\Index\controller;
use think\Controller;
use think\Request;
use app\lib\exception\BaseException;    // 这个就是引入我们的异常类
class Index extends Controller
{
    /**
     * 显示资源列表
     *
     * @return \think\Response
     */
    public function index()
    {
      throw new BaseException(['msg'=>'验证失败']);  // 上面的参数可以传也可以不传,不传的话就按默认
    }
}

好了,这就是thinkphp5.1的异常类处理了。其他框架基本类同。如果还有其他需求可以参照

官方异常处理文档

目录
相关文章
|
6月前
Thinkphp5实现接口嵌套
Thinkphp5实现接口嵌套
|
1月前
thinkphp5.1全局验证层封装
thinkphp5.1全局验证层封装
27 1
thinkphp5.1全局验证层封装
|
3月前
|
监控 安全 Java
Java反射:深入了解动态类操作
Java反射:深入了解动态类操作
70 0
|
9月前
|
Java
定义全局异常和全局异常处理器
定义全局异常和全局异常处理器
|
PHP 数据库
Yii2.0框架一共有哪些异常类?底层原理是什么?
Yii2.0框架一共有哪些异常类?底层原理是什么?
105 0
|
存储 缓存 前端开发
Yii2.0的AssetBundle类一共有哪些方法?可以实现哪些功能?底层原理是什么?
Yii2.0的AssetBundle类一共有哪些方法?可以实现哪些功能?底层原理是什么?
|
小程序 前端开发 数据库
小程序__01--后端返回类型是一个object具体类,前端小程序如何提取类中的私有变量
后端返回类型是一个object具体类,前端小程序如何提取类中的私有变量
|
缓存
读源码长知识 | 动态扩展类并绑定生命周期的新方式
在阅读viewModelScope源码时,发现了一种新的方式。 协程需隶属于某 CoroutineScope ,以实现structured-concurrency,而 CoroutineScope 应
136 0
(十八) 反射的原理是什么,反射创建类实例的三种方式是什么?
javac在这一阶段会把java代码编译为class文件,保存在硬盘中,这个文件中保存着这个类的类名、成员名、构造方法、其他方法等。
【Groovy】MOP 元对象协议与元编程 ( Expando 动态类 | 创建动态类 | 为动态类增加字段和方法 )
【Groovy】MOP 元对象协议与元编程 ( Expando 动态类 | 创建动态类 | 为动态类增加字段和方法 )
153 0
【Groovy】MOP 元对象协议与元编程 ( Expando 动态类 | 创建动态类 | 为动态类增加字段和方法 )