介绍基于ThinkPHP6的注解路由+自动接口文档生成+自动Mock测试数据生成

发布时间 - 2021-06-21 00:00:00    点击率:

下面由thinkphp框架教程栏目给大家介绍基于 thinkphp6 的注解路由 + 自动接口文档生成 + 自动mock测试数据生成,希望对需要的朋友有所帮助!

基于 ThinkPHP6 的注解路由 + 自动接口文档生成 + 自动测试数据生成

作者

zsw zswemail@qqcom主页  https://zsw.inkgithub  https://github.com/iszsw/mockgitee  https://gitee.com/iszsw/mock

使用

1、安装

composer require iszsw/mock:dev-master

2、添加测试代码 在 app/controller 目录下增加Test.php文件
ntroller;
use iszsw\mock\annotation\illustrate\AutoValidate;
use iszsw\mock\annotation\illustrate\Route;
use iszsw\mock\annotation\illustrate\Mock;
use iszsw\mock\annotation\illustrate\MockPack;
use iszsw\mock\annotation\illustrate\WikiItem;
use iszsw\mock\annotation\illustrate\WikiMenu;

/**
 * @WikiMenu("测试")
 * @package app\controller
 * Author: zsw zswemail@qq.com
 */
class Test extends BaseController
{

    /**
     * @Route("test", method="GET")
     * @WikiItem("首页", description="首页详情")
     *
     * @AutoValidate({"username":"require|chsAlpha"}, message={"username":"请输入用户名"})
     * @Mock("username", mode="request", title="用户名", example="name")
     * @Mock("name", mode="response", title="名字", example="name", description="文章ID")
     */
    public function index($username){
        return "hello " . $username;
    }

    /**
     * @Route("mock", method="GET")
     * @WikiItem("详情", description="文章详情")
     *
     * @Mock("id", title="ID", example="numberBetween", description="文章ID")
     * @MockPack("articles", mode="response", title="文章列表", description="文章列表", limit=5)
     * @Mock("id", mode="response", title="ID", example="randomDigitNotNull", description="文章ID")
     * @Mock("title", mode="response", title="标题", example="name")
     * @Mock("create_time", mode="response", title="创建时间", example={"date": {"Y-m-d", "now"}})
     * @Mock("content", mode="response", title="内容", example={"sentence": 10})
     * @Mock("image", mode="response", title="图片", example="randomDigit")
     * @MockPack("user", main=true, mode="response", title="用户", description="发布者信息", limit=0)
     * @Mock("username", mode="response", title="用户名", example="name")
     * @MockPack("user")
     * @MockPack("articles")
     * @Mock("page", mode="response", title="页码", example="randomDigitNotNull", description="当前页码")
     */
    public function mock(){}
}
3、复制文档资源文件 vendor/iszsw/mock/src/static 文件夹放置到public下

如果路径不不是 /static 可以在config/mock.php配置文件中修改
4、 访问
注解路由:/test?username=zsw

测试数据:/mock?mock=1

接口文档:/wiki

功能说明

配置文件 config/mock.php

1、注解路由

路由注解 模型注解 自动注入同Tp6官方注解

新增AutoValidate注解

@AutoValidate({"username":"require|chsAlpha"}, message={"username":"请输入用户名"})

2、接口测试数据生成

MockPack 嵌套数据生成支持无限级嵌套
@MockPack extends MockBase
    // 数据长度 0表示单层数据
    @var int limit 
    
    /*
     * 置顶 (limit > 1 时有效)
     * false:['fields'=>[["a"=>"b"], ["aa"=>"bb"]]]
     * true:[["a"=>"b"], ["aa"=>"bb"]]
     */
    @var boolean main

例:

/**
 * @MockPack("articles", mode="response", title="文章列表", description="文章列表", limit=3)
 * @Mock("title", mode="response", title="标题", example="name")
 * @Mock("content", mode="response", title="内容", example={"sentence": 10})
 *
 * @MockPack("user", main=true, mode="response", title="用户", description="发布者信息", limit=0)
 * @Mock("username", mode="response", title="用户名", example="name")
 * @MockPack("user")
 * 
 * @MockPack("articles")
 */
 
生成结果

{
    "articles": [{
        "title": "乔阳",
        "content": "Vero impedit et consequatur quasi doloribus dolores illum sit expedita doloremque fugiat esse deleniti quisquam.",
        "user": {
            "username": "方建明"
        }
    }, {
        "title": "蒙桂花",
        "content": "Iure explicabo officiis minima et impedit sunt dignissimos necessitatibus ratione animi nam aperiam dolorum.",
        "user": {
            "username": "谷致远"
        }
    }, {
        "title": "郑文",
        "content": "Minus cum unde exercitationem sunt laudantium eveniet voluptatem magni ut cum non.",
        "user": {
            "username": "宁丽娟"
        }
    }]
}
Mock 数据生成
@Mock extends MockBase
    /**
      * 自定义字符串 example="zsw"
      * Faker方法名 参考https://github.com/fzaninotto/Faker
      * 自定义方法名 \app\logic\Mock::name
      * example="方法名" || example={"方法名": {"参数1", "参数2"}}
      */
    @var string|array example

3、接口文档生成

使用参考

1、注解路由

2、接口测试数据生成

生成的数据格式为

{
    "articles": [{
        "title": "乔阳",
        "content": "Vero impedit et consequatur quasi doloribus dolores illum sit expedita doloremque fugiat esse deleniti quisquam.",
        "user": {
            "username": "方建明"
        }
    }, {
        "title": "蒙桂花",
        "content": "Iure explicabo officiis minima et impedit sunt dignissimos necessitatibus ratione animi nam aperiam dolorum.",
        "user": {
            "username": "谷致远"
        }
    }, {
        "title": "郑文",
        "content": "Minus cum unde exercitationem sunt laudantium eveniet voluptatem magni ut cum non.",
        "user": {
            "username": "宁丽娟"
        }
    }]
}

3、接口文档生成





# php  # composer  # thinkphp  # Static  # require  # 接口  # public  # github  # https  # gitee  # 首页  # 文章列表  # 文档  # 测试数据  # 请输入  # 自定义  # 配置文件  # 致远  # 丽娟  # 给大家 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: Laravel如何处理JSON字段_Eloquent原生JSON字段类型操作教程  Laravel怎么集成Vue.js_Laravel Mix配置Vue开发环境  如何在万网ECS上快速搭建专属网站?  Laravel Seeder怎么填充数据_Laravel数据库填充器的使用方法与技巧  如何快速查询网址的建站时间与历史轨迹?  bootstrap日历插件datetimepicker使用方法  浅述节点的创建及常见功能的实现  如何在云主机快速搭建网站站点?  Laravel如何处理异常和错误?(Handler示例)  常州企业网站制作公司,全国继续教育网怎么登录?  济南网站建设制作公司,室内设计网站一般都有哪些功能?  极客网站有哪些,DoNews、36氪、爱范儿、虎嗅、雷锋网、极客公园这些互联网媒体网站有什么差异?  如何快速重置建站主机并恢复默认配置?  Java Adapter 适配器模式(类适配器,对象适配器)优缺点对比  Laravel集合Collection怎么用_Laravel集合常用函数详解  lovemo网页版地址 lovemo官网手机登录  jimdo怎样用html5做选项卡_jimdo选项卡html5实现与切换效果【指南】  laravel怎么在请求结束后执行任务(Terminable Middleware)_laravel Terminable Middleware请求结束任务执行方法  网站视频制作书签怎么做,ie浏览器怎么将网站固定在书签工具栏?  javascript读取文本节点方法小结  东莞市网站制作公司有哪些,东莞找工作用什么网站好?  Laravel如何设置定时任务(Cron Job)_Laravel调度器与任务计划配置  Android实现代码画虚线边框背景效果  如何快速生成ASP一键建站模板并优化安全性?  Laravel如何使用Facades(门面)及其工作原理_Laravel门面模式与底层机制  Laravel如何实现用户注册和登录?(Auth脚手架指南)  Laravel如何使用Gate和Policy进行授权?(权限控制)  Bootstrap CSS布局之列表  怎么用AI帮你设计一套个性化的手机App图标?  如何在IIS服务器上快速部署高效网站?  Laravel事件和监听器如何实现_Laravel Events & Listeners解耦应用的实战教程  什么是JavaScript解构赋值_解构赋值有哪些实用技巧  Laravel如何实现全文搜索功能?(Scout和Algolia示例)  高防服务器:AI智能防御DDoS攻击与数据安全保障  Laravel如何将应用部署到生产服务器_Laravel生产环境部署流程  轻松掌握MySQL函数中的last_insert_id()  使用C语言编写圣诞表白程序  HTML 中如何正确使用模板变量为元素的 name 属性赋值  中国移动官方网站首页入口 中国移动官网网页登录  如何在 Go 中优雅地映射具有动态字段的 JSON 对象到结构体  Java遍历集合的三种方式  宙斯浏览器怎么屏蔽图片浏览 节省手机流量使用设置方法  儿童网站界面设计图片,中国少年儿童教育网站-怎么去注册?  用v-html解决Vue.js渲染中html标签不被解析的问题  如何挑选优质建站一级代理提升网站排名?  PHP正则匹配日期和时间(时间戳转换)的实例代码  如何用PHP快速搭建CMS系统?  进行网站优化必须要坚持的四大原则  android nfc常用标签读取总结  如何快速生成专业多端适配建站电话?