需求:利用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