TRR · v0.0.2 · 验证器篇


7/22/2019 TRR v0.0.2

验证器篇

日常

乐趣

诸葛亮是一个优秀的程序猿,
每一个锦囊都是应对不同的case而编写的!
但是优秀的程序猿也敌不过更优秀的bug!
六出祈山,
七进中原,
鞠躬尽瘁,
死而后已的诸葛亮只因为有一个错误的case-马谡,
整个结构就被break了!

简介

原因

为了减少验证器类编码,且不需要示例化,并调用验证器类,为了快速进行参数验证,我做了这个功能。

参考

💡原由

主要参考tp5.1的内置验证器模式:

发现编码起来不太友好, 需要写很多代码, 而且重复代码很高, 而我需要简化工作内容, 所以我就自己写了解析规则。

思路

在注解中完成验证器的调用,以及请求参数验证。并且需要更加简洁的方式完成。

安装扩展

composer require wangyu/tp-anntation
1

注册thinkphp5.1 middleware中间件注册

⚠️注意事项

thinkphp5.1 middleware中间件文件在config/middleware.php

注册验证器中间件

<?php

return [
    // 默认中间件命名空间
    'default_namespace' => 'app\\http\\middleware\\',
    'ReflexValidate' => \WangYu\annotation\Validate::class  // 开启注释验证器,需要的中间件配置,请勿胡乱关闭
];
1
2
3
4
5
6
7

路由注册中添加中间件验证

  • thinkphp5.1 原生路由中间件使用,参考 👉 点我了解 👈

    例如:

    Route::rule('hello/:name','hello')
    	->middleware(['Auth', 'Check']);
    
    1
    2
  • TRR 模块中间件注册

    例如:需要在route/route.php

    \WangYu\annotation\Route::reflex('api',['Auth','ReflexValidate']);
    
    1
  • TRR 类 中间件注册

    例如: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
    8
  • TRR 类方法 中间件注册

    例如:application/api/controller/v1/Book.phpgetBook

    /**
     * @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);

}
1
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);

}
1
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,我将用更多的时间来让它更加丰富和优秀。

Last Updated: 8/12/2019, 4:59:29 PM