在处理逻辑代码中我们经常会碰到逻辑判断提示 或者token无效,操作失败,服务内部错误,这个时候我们需要停止程序并且返回提示和状态码

1.新建异常基类

extend/exception/BaseException.php

<?php
/*** Created by PhpStorm.* User: Pasa吴* Date: 2022/6/5* Time: 12:46*/namespace exception;use think\Exception;class BaseException extends Exception
{public $code = 200;public $msg = 'invalid parameters';public $errorCode = 0;public $data = '';/*** 构造函数,接收一个关联数组* @param array $params 关联数组只应包含code、msg和errorCode,且不应该是空值*/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'];$this->message = $params['msg'];}if (array_key_exists('message', $params)) {$this->message = $params['message'];}if (array_key_exists('errorCode', $params)) {$this->errorCode = $params['errorCode'];}if (array_key_exists('data', $params)) {$this->data = $params['data'];}}
}

2.新建API异常类

extend/exception/ApiException.php

<?php
/*** Created by PhpStorm.* User: Pasa吴* Date: 2022/6/5* Time: 12:46*/namespace exception;use think\Exception;class BaseException extends Exception
{public $code = 200;public $msg = 'invalid parameters';public $errorCode = 0;public $data = '';/*** 构造函数,接收一个关联数组* @param array $params 关联数组只应包含code、msg和errorCode,且不应该是空值*/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'];$this->message = $params['msg'];}if (array_key_exists('message', $params)) {$this->message = $params['message'];}if (array_key_exists('errorCode', $params)) {$this->errorCode = $params['errorCode'];}if (array_key_exists('data', $params)) {$this->data = $params['data'];}}
}

3.异常处理类

extend/exception/Http.php

<?php
/*** Created by PhpStorm.* User: Pasa吴* Date: 2022/6/5* Time: 13:18*/namespace exception;use think\exception\Handle;
use think\exception\HttpException;
use think\exception\ValidateException;
use think\facade\Request;
use think\Response;
use Throwable;class Http extends Handle
{public function render($request, Throwable $e): Response{// 添加自定义异常处理机制if ($e instanceof BaseException) {//如果是自定义异常,则控制http状态码,不需要记录日志//因为这些通常是因为客户端传递参数错误或者是用户请求造成的异常//不应当记录日志$this->code      = $e->code;$this->msg       = $e->msg;$this->errorCode = $e->errorCode;$result = ['code' => $this->errorCode, 'msg' => $this->msg, 'data' => $e->data];return json($result, $this->code);}// 参数验证错误if ($e instanceof ValidateException) {$result = ['code' => $e->getCode(), 'msg' => $e->getError(), 'data' => []];return json($result, 200);}// 请求异常if ($e instanceof HttpException) {$this->msg       = $e->getMessage();$this->code      = 200;$this->errorCode = 0;$result          = ['code' => $this->errorCode, 'msg' => $this->msg, 'data' => Request::instance()->url()];return json($result, $this->code);}// 其他错误交给系统处理return parent::render($request, $e);}}

4.异常处理接管

TP6框架支持异常处理由开发者自定义类进行接管,需要在app目录下面的provider.php文件中绑定异常处理类

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

5.抛异常

<?php
/*** Created by PhpStorm.* User: Pasa吴* Date: 2022/6/4* Time: 23:19*/namespace app\api\controller;use curd\BuildCurd;
use exception\ServiceException;class Test
{public function test(){throw new ServiceException(['异常提示']);}
}

ThinkPHP6 API接管异常相关推荐

  1. Java学习--API和异常

    Api和异常 概述: 内部类:就是在一个类中定义一个类.在类A中定义一个类B,B就叫做A的内部类 格式: public calss 类名{修饰符 class 类名{} }//范例 public cla ...

  2. ThinkPHP6 API 单文件+多文件上传代码实现方式

    ThinkPHP6 API 单文件+多文件上传代码实现方式 开发中经常要用到接口上传 单文件或多文件,做个备忘录,有需要的同学直接copy. 提交方式:form-data , 参数名 file[] T ...

  3. php接口异常,api接口异常怎么办

    异常: 在程序开发过程中出现的不正常情况,就是异常.比如除数是0,参数为null,调用参数的成员变量或者方法,数组下标越界. 异常分为两大类型: (1)Exception:程序员可以解决的:空指针,除 ...

  4. asp.net core web api之异常

    官方建议用app.UseExceptionHandler("/error")来集中处理异常,本例是一个具体的应用. 比如项目中有一个ViewModel,要求Name最大长度为5 / ...

  5. Java核心API -- 9(异常)

    异常处理 异常结构中的父类Throwable类,其下子类Exceptionlei类和Error类.我们在程序中可以捕获的是Exception的子类异常. Error系统级别的错误:Java运行时环境出 ...

  6. 阿里云短信api发送异常

    Uncaught AliyunCoreExceptionServerException: MissingPhoneNumbers PhoneNumbers is mandatory for this ...

  7. ASP.NET Core和Web API:用于管理异常和一致响应的自定义包装器

    目录 介绍 为什么? 怎么做? VMD.RESTApiResponseWrapper Nuget软件包 安装及使用 ASP.NET Core集成 ASP.NET Web API集成 样本响应输出 定义 ...

  8. 一文详解Kafka API

    摘要:Kafka的API有Producer API,Consumer API还有自定义Interceptor (自定义拦截器),以及处理的流使用的Streams API和构建连接器的Kafka Con ...

  9. 【Kafka笔记】4.Kafka API详细解析 Java版本(Producer API,Consumer API,拦截器等)

    简介 Kafka的API有Producer API,Consumer API还有自定义Interceptor (自定义拦截器),以及处理的流使用的Streams API和构建连接器的Kafka Con ...

最新文章

  1. C++ 容器1 vector
  2. 11月Android笔记
  3. android eclipse 环境
  4. javascript获取asp.net服务器端控件的值(2009-10-31 15:24:26)转载标签:杂谈 分类:技术分类
  5. unix下批量进程的创建和强杀命令
  6. Netflix CEO:入华谈判进展顺利 或很快获牌照
  7. udp打洞没反应_这8种酒精饮料:1亿人在喝,你还没听过
  8. MFC 教程【11_MFC下的文件类 】
  9. find命令之正则表达式
  10. 第1章 Pandas基础操作(使用pandas进行数据分析,从小白逆袭大神,你会了吗?)
  11. vue移动端实现电子签名画板
  12. windows保护无法启动修复服务器,解决使用sfc命令提示“windows 资源保护无法启动修复服务”的方法...
  13. Angular设置代理
  14. 在企业工作一年多的几点感悟
  15. 浏览器主页进来是hao123
  16. 如何选择适合自己的研究方法?定性vs定量vs混合方法研究
  17. reverse()函数
  18. 20皇后的不是很正确的解法
  19. 线上直播 线下分享丨这样的2019 ACOUG年会你绝对喜欢!
  20. 埃塞俄比亚 - 阿姆哈拉语

热门文章

  1. 《python编程从入门到实践》第2版 第四章课后练习
  2. 使用JavaCV把图片合成视频(实用)
  3. 报错!Exception in thread “main“ java.lang.UnsatisfiedLinkError: ilog.cplex.Cplex.CPXopenCPLEX([I)J
  4. GITC--2014全球互联网技术大会正式开始售票
  5. HDU:1998 奇数阶魔方(规律填数)
  6. 数字存储示波器基本工作原理与使用方法
  7. android 4.0 原生短信,Android 4.0 短信发不出去解决办法
  8. 基于润和3516 dv300开发板,运行鸿蒙3.1 ArkUI helloworld
  9. 自定义波浪View,使头像跟着波浪背景浮动
  10. 智能化生鲜配送系统,让采购更高效