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

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

作者

zsw zswemail@qqcom

使用

1、安装

composer require iszsw/mock:dev-master

2、添加测试代码 在 app/controller 目录下增加Test.php文件

namespace app\controller;

use app\BaseController;

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](https://my.oschina.net/u/925486) 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、接口文档生成

/**

* @WikiMenu("测试")

*/

class Test extends BaseController

{

/**

* @Route("test", method="GET")

* @WikiItem("首页", description="首页详情")

* @Mock("name", mode="response", title="名字", example="name", description="名字")

*/

public function index(){

return "zsw";

}

}

使用参考

1、注解路由

2、接口测试数据生成

namespace app\controller;

use app\BaseController;

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("测试")

*/

class Test extends BaseController

{

/**

* @Route("mock", method="GET")

* @WikiItem("详情", description="文章详情")

* @Mock("id", title="ID", example="numberBetween", description="文章ID")

*

* @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")

*/

public function mock(){}

}

生成的数据格式为

{

"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、接口文档生成

namespace app\controller;

use iszsw\mock\annotation\illustrate\Route;

use iszsw\mock\annotation\illustrate\WikiItem;

use iszsw\mock\annotation\illustrate\WikiMenu;

/**

* @WikiMenu("测试")

*/

class Test

{

/**

* @Route("test", method="GET")

* @WikiItem("首页", description="首页详情")

* @Mock("username", mode="request", title="用户名", example="name")

* @Mock("name", mode="response", title="名字", example={"\app\controller\Mock::name": {100}}, description="文章ID")

*/

public function index($username){}

}

c999814729826322580746744ffc78d1.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值