TRR · v0.0.2 · 验证器篇
验证器篇
日常
乐趣
诸葛亮是一个优秀的程序猿,
每一个锦囊都是应对不同的case而编写的!
但是优秀的程序猿也敌不过更优秀的bug!
六出祈山,
七进中原,
鞠躬尽瘁,
死而后已的诸葛亮只因为有一个错误的case-马谡,
整个结构就被break了!
简介
原因
为了减少验证器类编码,且不需要示例化,并调用验证器类,为了快速进行参数验证,我做了这个功能。
参考
💡原由
主要参考tp5.1的内置验证器模式:
发现编码起来不太友好, 需要写很多代码, 而且重复代码很高, 而我需要简化工作内容, 所以我就自己写了解析规则。
- ThinkPHP5.1 注解路由: 👉 点我了解 👈
思路
在注解中完成验证器的调用,以及请求参数验证。并且需要更加简洁的方式完成。
安装扩展
composer require wangyu/tp-anntation
thinkphp5.1
middleware
中间件注册
注册⚠️注意事项
thinkphp5.1
middleware
中间件文件在config/middleware.php
注册验证器
中间件
<?php
return [
// 默认中间件命名空间
'default_namespace' => 'app\\http\\middleware\\',
'ReflexValidate' => \WangYu\annotation\Validate::class // 开启注释验证器,需要的中间件配置,请勿胡乱关闭
];
2
3
4
5
6
7
路由
注册中添加中间件
验证
在thinkphp5.1 原生路由中间件使用
,参考 👉 点我了解 👈例如:
Route::rule('hello/:name','hello') ->middleware(['Auth', 'Check']);
1
2TRR
模块中间件注册例如:需要在
route/route.php
\WangYu\annotation\Route::reflex('api',['Auth','ReflexValidate']);
1TRR
类 中间件注册例如:
application/api/controller/v1/Book.php
/** * Class Book * @doc('图书类') * @group('v1/book') * @middleware('ReflexValidate') * @package app\api\controller\v1 */ class Book{}
1
2
3
4
5
6
7
8TRR
类方法 中间件注册例如:
application/api/controller/v1/Book.php
中getBook
/** * @doc('查询指定bid的图书') * @route(':bid','get') * @param Request $bid * @param('bid','bid的图书','require') * @return mixed */ public function getBook($bid) { $result = BookModel::get($bid); return $result; }
1
2
3
4
5
6
7
8
9
10
11
12
注解验证器参数
⚠️注意事项
@param
和@validate
两者取其一,如果同时存在,TRR
默认取@validate
注解验证器参数表
因为
|
和markdown
语法冲突,所以使用#
代替,和注解api markdown档中一样,请大家牢记。
名称 | 作用 | 类 | 方法 | 形态 | 举例 |
---|---|---|---|---|---|
validate | 模型验证 | ️ | ☑ | @validate('验证器名称') | @validate('Token') |
param | 参数验证, 验证规则就是thinkphp5.1内置验证规则, 想扩展, 先了解 thinkphp5.1 验证器基类\think\Validate | ️ | ☑ | @param('名称','阐述','验证规则','默认值') | @param('title','标题','require#max:99','2') |
注解验证器参数使用样例
@validate
注解函数
示例:
/**
* @doc('创建图书')
* @route('','post')
* @validate('Token')
* @return \think\response\Json
*/
public function create()
{
return json([
'class'=>'application/api/controller/v1/Book.php',
'action'=>'create'
],200);
}
2
3
4
5
6
7
8
9
10
11
12
13
14
@param
注解函数
示例:
/**
* @doc('创建图书')
* @route('','post')
* @param('name','图书名称','require|graph|length:1,50')
* @param('img','图书img','require|graph|length:1,16')
* @return \think\response\Json
*/
public function create()
{
return json([
'class'=>'application/api/controller/v1/Book.php',
'action'=>'create'
],200);
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
访问
举例:
在
TRR
项目application/api/controller/v1
下创建Goods.php
内容:
<?php /** Created By wene<china_wangyu@aliyun.com>, Data: 2019/7/3 */ namespace app\api\controller\v1; /** * Class Goods * @doc(商品测试类) * @group('v1/goods') * @middleware('Validate') * @package app\api\controller\v1 */ class Goods { /** * @doc('创建商品') * @route('','post') * @param('name','图书名称','require|graph|length:1,50') * @param('img','图书img','require|graph|length:1,16') * @return \think\response\Json */ public function create() { return json([ 'class'=>'application/api/controller/v1/Goods.php', 'action'=>'create' ],200); } }
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32在接口测试工具
postman
中访问请求地址默认不带项目的网址哈,请自行补充,
请求方式:
post
请求地址:http://你的网址/v1/goods
请求参数:@validate
模式情况效果和下面一模一样。
@param
模式不带参数,请求结果:
{ "code": 400, "message": "3000: 错误内容 . 参数验证 . 图书img不能为空,图书名称不能为空", "request_url": "v1\/book" }
1
2
3
4
5带参数的,并且
img
参数类型错误,请求结果:{ "code": 400, "message": "3000: 错误内容 . 参数验证 . 图书img不能为空", "request_url": "v1\/book" }
1
2
3
4
5如上,证明你已经能成功使用TRR的注解验证器。谢谢您的耐心阅读和使用
TRR
,我将用更多的时间来让它更加丰富和优秀。