TP5内部异常API数据输出的自定义方法编写

一曲冷凌霜 提交于 2019-12-05 05:32:25

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

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!