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


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

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

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

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

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

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

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

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

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

    我们封装一个函数到公共函数文件中common.php 这个文件的位置在applicationcommon.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方法  这个方法存在于thinkphplibrary	hinkexceptionHandle.php
    
    我们可以进行编写           ApiHandleException.php 
    
    这个文件的位置在          applicationcommonlibexceptionApiHandleException.php(直接在common目录下新建lib文件夹)
    
    代码的相关注释写在代码上
    <?php
     
    namespace appcommonlibException;
    use Exception;
    use thinkexceptionHandle;
     
    /**
     * 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文件位置在applicationconfig.php

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

    // 异常处理handle类 留空使用 	hinkexceptionHandle
    'exception_handle'       => 'appcommonlibexceptionApiHandleException',

    可以测试

    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

    位置在:applicationcommonlibexceptionApiException.php

    <?php
     
    namespace appcommonlibexception;
     
    use thinkException;
    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

  • 相关阅读:
    JS中的this指向问题
    Jinja2用法总结
    Kafka 生产者 拦截器
    Kafka 生产者 工作流程和Demo示例
    Kafka 验证集群部署和吞吐量测试
    Kafka 线上环境部署需要考虑的因素
    Kafka单点环境安装
    Kafka和Confluent的关系
    Kafka 概要设计
    ActiveMQ 介绍安装使用入门
  • 原文地址:https://www.cnblogs.com/yehuisir/p/11909414.html
Copyright © 2020-2023  润新知