记录一下TP5.1多应用多版本管理路由设计及文档解决方案!

首先,不要问TP6的解决方案,本篇文章提供的方案已经测试过了在TP6上是不可用的!请知悉!在开始之前,请确保你和我的需求一致,如果不一致请勿修改!

Snipaste_2022-03-11_23-04-48.png

注意事项

本博文内提到的所有“TP5”都是指“TP5.1”,而不是“TP5.0”!

我的需求

  1. 多应用管理(TP5默认就是多应用,TP6需要装个包,不麻烦)
  2. 多版本(TP5研究出来了,TP6翻了一圈貌似需要改源码,不考虑!)
  3. 文档生成工具是:ThinkPHP-Apidoc,见:https://hg-code.gitee.io/thinkphp-apidoc/
  4. API项目,前后端分离(这个貌似就是很基础的,不可能不支持的)

需求说明

  1. 多应用就不说了,我一个辣鸡前端都知道啥意思,各位后端大佬不可能不知道吧?
  2. 多版本意思就是我希望接口有版本区分,如:admin/v1/account/loginadmin/v2/account/login,这样做的目的是增加灵活性并且最大程度上保证向下兼容,不可能说系统迭代,老接口全部废弃,这太煞笔了;

如何实现

多应用跳过,TP5默认就是多应用!主要这篇博文是说一下,如果开启多版本能力;我的目的结构如下:

Snipaste_2022-03-11_22-51-40.png

打开 config/app.php 文件,修改 controller_auto_searchtrue

Snipaste_2022-03-11_22-53-35.png

其实到这一步就算完成了,简单吧,但很显然,既然我都要管理版本,向下兼容了,既然认认真真搞接口,那不得搞个文档?然后apidoc在tp5下还有坑,我也给大家整理出来了!

坑1:不能用app

配置应用路径的时候得用 application!不能使用 app,虽然不会报错但是会找不到你写的任何接口!

Snipaste_2022-03-11_22-55-47.png

坑2:路径问题

默认转小写配置貌似是整个 $class 的首字母大小写调整,这不符合我的需求,所以可以使用 custom 来自定义路径!这里我将控制器的首字母变成了小写(默认是大写!)

Snipaste_2022-03-11_23-01-48.png

Snipaste_2022-03-12_14-47-52.png

<?php
return [
    "auto_url" => [
        // 自定义URL规则
        "custom" => function ($class, $method) {
            $paths = explode("\\", $class);
            $url = [];
            foreach ($paths as $index => $path) {
                if (!in_array($path, ["app", "controller"])) {
                    $path = preg_replace("/([A-Z])/", "_$1", lcfirst($path));
                    array_push($url, strtolower($path));
                }
            }

            array_push($url, $method);
            return "/" . implode("/", $url);
        }
    ]
];