需求:利用postman进行请求api接口过程中 关于一些数据输出异常的情况下 我们希望通过自己编写一些类和方法

实现便于后端人员进行根据提示进行调试处理! 以下测试的时候 请设置 app_debug=>true

-------------------------------------------------------------------------------------------------------------------------------------------

新建一个test接口为例:位置在application\api\controller\Test.php(找不到位置就新建文件夹!)

这个test接口要创建对应的路由 位置在:application\route.php

假如我 请求test接口下的save方法 接受返回的信息 我需要自行组织 比如

public  function save(){
return [
'status'=>1,
'message'=>'OK',
'data'=>input('post.')
]; }

这样postman接受返回的信息长这样

这样非常的麻烦 因此我们可以封装一个公共的方法 调用的时候进行传参即可

我们封装一个函数到公共函数文件中common.php 这个文件的位置在application\common.php

/**
* 通用化API接口数据输出
* @param int $status 业务状态码
* @param string $message 信息提示
* @param [] $data 数据
* @param int $httpCode http状态码
* @return array
*/
function show($status, $message, $data=[], $httpCode=200) { $data = [
'status' => $status,
'message' => $message,
'data' => $data,
]; return json($data, $httpCode);
}

封装之后 在上面提到的那个方法下 就可以进行调用

public  function save(){
return show(1,'OK',input('post.'),200);
}

返回结果也是和上面的一样

自定义render方法  这个方法存在于thinkphp\library\think\exception\Handle.php

我们可以进行编写           ApiHandleException.php 

这个文件的位置在          application\common\lib\exception\ApiHandleException.php(直接在common目录下新建lib文件夹)

代码的相关注释写在代码上
<?php

namespace app\common\lib\Exception;
use Exception;
use think\exception\Handle; /**
* Class ApiHandleException
* @内部异常数据输出解决方案 render
*/
class ApiHandleException extends Handle{ //状态码
public $httpCode = 500;
//重写继承类的方法 编写后 修改config.php的配置 exception_handle
//配置之前 会出现 System Error之类的报错
public function render(Exception $e)
{
//判断如果是开启调试模式的话 作用是让服务端人员能够知道错误的具体位置
if(config('app_debug') == true){
return parent::render($e);
}
//判断一个对象是否是某个类的实例
if($e instanceof ApiException){
$this->httpCode = $e->httpCode;//将ApiException的code传过来
}
return show(0,$e->getMessage(),[],$this->httpCode);
}
}

编写之后 我们还需要修改config.php这个文件下的  exception_handle 的值

config.php文件位置在application\config.php

找到exception_handle之后 进行配置  它默认的值为空 我们填上内容

// 异常处理handle类 留空使用 \think\exception\Handle
'exception_handle' => '\app\common\lib\exception\ApiHandleException',

可以测试

public  function save(){

        if($data['ids']){
echo 111;
exit;
} }

进行请求  可以清除的知道具体的错误位置

自定义   exception方法

首先我们用自带的方法进行测试

public  function save(){

        $data = input("post.");
//让mt不存在
if($data['mt'] != 1){
exception('您提交的数据不合法!');
} }

返回的信息是

但是这样没有固定的状态码  因此我们可以在上面所说的render方法的基础上 在新建一个自定义类和方法

创建文件ApiException.php

位置在:application\common\lib\exception\ApiException.php

<?php

namespace app\common\lib\exception;

use think\Exception;
use Throwable; //自定义 exception方法
class ApiException extends Exception{ public $message = '';
public $httpCode = 500;
public $code = 0;
public function __construct($message = '',$httpCode = 0 ,$code = 0)
{
$this->message = $message;
$this->httpCode = $httpCode;
$this->code = $code; }
}

编写完之后 我们在改写刚才的方法内容

public  function save(){

        $data = input("post.");
//让mt不存在
if($data['mt'] != 1){
//改写后
throw new ApiException('您提交的数据不合法!',400);
} }

在进行请求 查看返回信息就可以看到不一样的结果


关于TP5内部异常数据输出解决的介绍就到这里

版权声明:本文为CSDN博主「张芝山」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/zhangzeshan/article/details/91882300

TP5内部异常API数据输出的自定义方法编写的更多相关文章

  1. TP5使用API时不可预知的内部异常

    最常见的错误形式例如 controller不存在或者 action不存在之类的 我们第一时间想到的 就是 使用 try{}catch(){} 来捕获 例如: /** * show方法在common里定 ...

  2. PHP--通用化API接口数据输出 封装

    /** * 通用化API接口数据输出 * author qinpeizhou * @param $message * @param array $data * @param int $httpCode ...

  3. tp5数据输出

    法一:系统配置 'default_return_type'=>'json' 法二:输出设置 namespace app\index\controller; class Index { publi ...

  4. 【性能诊断】六、并发场景的性能分析(windbg案例,大量的内部异常造成CPU飙升)

    在做产品的某个核心模块的性能优化时,发现压到100并发时应用服务器的CPU就飙升至90%以上,50并发以后TPS就基本定格在一个数值上.使用性能监视器收集应用服务器的数据,发现每秒的.NET CLR ...

  5. 把数据输出到Word (组件形式)

    上一篇的文章中我们介绍了在不使用第三方组件的方式,多种数据输出出到 word的方式,最后我们也提到了不使用组件的弊端,就是复杂的word我们要提前设置模板.编码不易控制.循环输出数据更是难以控制.接下 ...

  6. TensorLayer官方中文文档1.7.4:API – 数据预处理

    所属分类:TensorLayer API - 数据预处理¶ 我们提供大量的数据增强及处理方法,使用 Numpy, Scipy, Threading 和 Queue. 不过,我们建议你直接使用 Tens ...

  7. ORACL内部异常:

    ORACL内部异常: ORA-00001: 违反唯一约束条件 (.) ORA-00017: 请求会话以设置跟踪事件 ORA-00018: 超出最大会话数 ORA-00019: 超出最大会话许可数 OR ...

  8. 小程序开发-7-访问api数据与ES6在小程序中的应用

    访问API数据与ES6在小程序中的应用 看待组件的两种观点 组件复用 代码分离-(特别重要) 不能在一个页面写所有的代码,代码分离具有很强的可读性.可维护性 Blink Api 介绍与测试API ur ...

  9. Spark Structured Streaming框架(3)之数据输出源详解

    Spark Structured streaming API支持的输出源有:Console.Memory.File和Foreach.其中Console在前两篇博文中已有详述,而Memory使用非常简单 ...

随机推荐

  1. 一次特殊的“VARCHAR转numeric失败”错误记录

    今天接触到一个很有意思的问题.当我在执行一条INSERT的sql语句时,他总是报字符串转数字类型失败. 问题 首先,该表中的所有数字类型的字段都是非必填,其次,每个数字类型的字段都有默认值.最令我感到 ...

  2. FastDFS搭建单机图片服务器(一)

    防丢失转载:https://blog.csdn.net/MissEel/article/details/80856194 根据 分布式文件系统 - FastDFS 在 CentOS 下配置安装部署 和 ...

  3. MySQL-第十篇多表连接查询

    1.SQL92规范.SQL99规范 2.广义笛卡尔积,多表之间没有任何连接条件,得到的结果将是N x M条记录. 3.SQL92中的左外连接.右外连接,连接符有(+或*),放在连接条件那一边就叫做左或 ...

  4. Spring Boot & Restful API 构建实战!

    作者:liuxiaopeng https://www.cnblogs.com/paddix/p/8215245.html 在现在的开发流程中,为了最大程度实现前后端的分离,通常后端接口只提供数据接口, ...

  5. SpringBoot官方文档学习(二)使用Spring Boot构建系统

    强烈建议您选择一个支持依赖关系管理并且可以使用发布到“ Maven Central”仓库的构建系统.我们建议您选择Maven或Gradle.其他构建系统(例如,Ant)也可以和Spring Boot一 ...

  6. SCUT - 106 - 花式ac - 主席树/启发式合并Treap

    https://scut.online/p/106 错在这组样例,发现是离散化之后,对k访问的时候也是应该访问离散化之后的k. 12 4 1 1 2 2 5 5 4 4 3 3 2 1 1 3 3 5 ...

  7. Python 内置函数raw_input()和input()用法和区别

    我们知道python接受输入的raw_input()和input() ,在python3 输入raw_input() 去掉乐,只要用input() 输入,input 可以接收一个Python表达式作为 ...

  8. P3724 [AH2017/HNOI2017]大佬

    传送门 发现保持自信和做其他事情互不干扰,可以直接做一次 $dp$ 求出最多能空出几天来怼大佬 然后就变成给你若干天,是否能怼死大佬,考虑求出所有的 天数和输出的嘲讽值集合,因为天数不多,嘲讽值增长很 ...

  9. Spring、Spring MVC、Struts2、、优缺点整理(转)

    Spring 及其优点 大部分项目都少不了spring的身影,为什么大家对他如此青睐,而且对他的追捧丝毫没有减退之势呢 Spring是什么: Spring是一个轻量级的DI和AOP容器框架. 说它轻量 ...

  10. Could not load file or assembly system.data.sqlite.dll or one for it's depedencies

    最近做一个winform项目,因为数据库用的表很少,所以用的是轻量级数据库sqlite.sqlite的优点很多,但是他要分两个版本,32位或者64位,不能同时兼容. 我遇到的问题是,我在开发端用的是. ...