TRR · v0.0.2 · 路由篇


7/22/2019 TRR v0.0.2

路由篇

日常

乐趣

  • 问:程序猿最讨厌康熙的哪个儿子?
  • 答:胤禩,因为他是八阿哥(bug)。

简介

route.php 文件位置在: route/route.php

原因

为了减少编辑路由文件route.php, 也为了减少错误的配置情况, 当然还有一点是我懒啊, 不希望去做重复并且有迹可循的事情, 所以做了这个扩展。

参考

注意事项

主要参考tp5.1的内置路由实现模式,
发现编码起来不太友好,
很多东西需要写很多,
而我需要简化工作内容,
所以我就自己写了解析规则。

思路

第一次:我采取编辑器自动注解模式来完成功能(某些参数还是需要手动哈

项目地址

  • github: https://github.com/china-wangyu/TP5.1-Restful-Api
  • 码云: https://gitee.com/china_wangyu/TP5.1-Restful-Api

效果如下:

<?php
namespace app\api\controller\v1;
/**
 * Class Auth Auth授权类
 * @package app\api\controller\v1
 */
class Auth extends Base
{
    /**
     * @doc 获取服务器授权1
     * @route /api/v1/auth get
     * @param string $appSecret 授权字符 require|alphaNum 1
     * @param string $appSec2t 授权字符1 require|alphaNum 1
     * @param string $appId 开发者ID
     * @success {"code":400,"msg":"appSecret不能为空","data":[]}
     * @error {"code":400,"msg":"appSecret不能为空","data":[]}
     */
    public function read()
    {
        return $this->success('成功~',$this->param);
    }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22

其实,使用起来没有什么大问题,主要是看着注解在编辑器里有一条条波浪线,说实话看起来不爽,那就重来

第二次,我采取手动注解模式

项目地址

  • github: https://github.com/china-wangyu/TRR
  • 码云: https://gitee.com/china_wangyu/TRR

效果如下:

<?php
/** Created By wene<china_wangyu@aliyun.com>, Data: 2019/7/3 */


namespace app\api\controller\v1;


/**
 * Class Book
 * @doc(图书类)
 * @group('v1/book')
 * @middleware('Validate')
 * @package app\api\controller\v1
 */
class Book
{
    /**
     * @doc('创建图书')
     * @route('','get')
     * @param('name','图书名称','require|graph|length:1,50')
     * @param('img','图书img','require|graph|length:1,16')
     * @return \think\response\Json
     * @success('')
     * @error('')
     */
    public function create()
    {
        return json(['msg'=>'创建成功'],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

提示

有了第一次实现的基础,第二次实现快了许多,也简单了许多,并且对代码做了很多优化和熔炼,为了方便大家阅读源码。
并且,我也密切关注波浪线这个问题,并解决了它(希望@all 可以在@param上写其他的注解操作,避免出现)。
原创不易,希望大家多支持和谅解。

使用

安装扩展

composer require wangyu/tp-anntation
1

模块注解路由注册参数说明

名称 作用 形态 举例
\WangYu\annotation\Route::reflex('api'); 注册模块路由函数 \WangYu\annotation\Route::reflex(string:'模块名称',array:中间件集合) \WangYu\annotation\Route::reflex('api',[])

模块注解路由注册

route\route.php中添加以下内容:

<?php

\WangYu\annotation\Route::reflex('api'); # 注册注解`api`模块路由

return[];
1
2
3
4
5

路由注解参数

路由注解参数表

名称 作用 方法 形态 举例
doc /方法功能描述 @doc('/方法功能描述') @doc('创建图书')
middleware /方法中间件注册 @middleware('中间件名称1',...) @middleware('Validate')
group 路由分组 @group('分组rule') @group('v1/book')
route 方法路由注册,
如果存在类路由分组@group注解函数,
就会把 方法@route路由rule,
拼接到类@group路由分组rule之后,
并用/链接
@route('rule','method') @route('create','post')

路由注解参数使用样例

@doc 注解函数

  • 示例:

    <?php
    /** Created By wene<china_wangyu@aliyun.com>, Data: 2019/7/3 */
    
    namespace app\api\controller\v1;
    
    /**
     * Class Book
     * @doc(图书类)
     * @package app\api\controller\v1
     */
    class Book{}
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
  • 方法

    示例:

    /**
     * @doc('创建图书')
     */
    public function create()
    {
        return json(['msg'=>'创建成功'],200);
    }
    
    1
    2
    3
    4
    5
    6
    7

@middleware 注解函数

  • 类 示例:

    <?php
    /** Created By wene<china_wangyu@aliyun.com>, Data: 2019/7/3 */
    
    namespace app\api\controller\v1;
    
    /**
     * Class Book
     * @doc(图书类)
     * @middleware('Validate','Auth')
     * @package app\api\controller\v1
     */
    class Book{}
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
  • 方法 示例:

    /**
     * @doc('创建图书')
     * @middleware('Auth1','Auth2')
     */
    public function create()
    {
        return json(['msg'=>'创建成功'],200);
    }
    
    1
    2
    3
    4
    5
    6
    7
    8

@group 注解函数

  • 示例:

    <?php
    /** Created By wene<china_wangyu@aliyun.com>, Data: 2019/7/3 */
    
    namespace app\api\controller\v1;
    
    /**
     * Class Book
     * @doc(图书类)
     * @middleware('Validate','Auth')
     * @group('v1/book')
     * @package app\api\controller\v1
     */
    class Book{}
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13

@route 注解函数

  • 示例:

    /**
     * @doc('创建图书')
     * @route('create','post')
     */
    public function create()
    {
        return json(['msg'=>'创建成功'],200);
    }
    
    1
    2
    3
    4
    5
    6
    7
    8

访问

举例:

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

在接口测试工具postman中访问

请求地址默认不带项目的网址哈,请自行补充,

请求方式:post 请求地址:http://你的网址/v1/goods 请求参数:

请求结果:

{
    "class": "application\/api\/controller\/v1\/Goods.php",
    "action": "create"
}
1
2
3
4

如上,证明你已经能成功使用TRR的注解路由。谢谢您的耐心阅读和使用TRR,我将用更多的时间来让它更加丰富和优秀。

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