序
最近写的项目基本都基于前后端分离,写完接口还要去编写文档,两边折腾太累了,找了这么个解决方案Swagger-php,能够在写接口的时候通过注解的方式实现自动生成文档,花了不少时间总算折腾出来了,记录下!
技术点
1.composer
//更新指令
composer update
2.swagger-ui
//git下载
git clone https://github.com/swagger-api/swagger-ui.git
3.swagger-php
安装步骤
1.安装swagger-php后端
进入你的tp5框架找到根目录下,打开composer.json找到require项,添加一行(注意,每行用逗号分隔)。
"zircote/swagger-php": "*"
使用更新命令
composer update
使用安装指令(这里安装以下这个版本,测试时安装了N个版本,唯独这个成功了( ╯□╰ ))
composer require "zircote/swagger-php:2.0.13"
2.生成swagger.json文件(这里需要先建立存放swagger.json的文件夹swagger-docs,这个文件夹名称随意,存放位置也随意 )
//第1个路径是你安装成功后组件的路径;
//第2个路径是你想要生成这个目录下所有用swagger方式注释的php文件,把所有注释生成api文档;
//第3个路径是你存放生成swagger.json的路径。
php ./vendor/zircote/swagger-php/bin/swagger ./vendor/zircote/swagger-php/Examples -o ./swagger-docs/swagger.json
3.swagger-ui加载生成的json文件
<?php
namespace app\index\controller;
use think\Controller;
use Swagger\Annotations as SWG;
class Index extends Controller
{
public function index(){
// APP_PATH tp框架5.1不再提供常量,自己定义根目录
// 测试dome在vendor/zircote/swagger-php/Examples/dynamic-reference 自行复制测试
$path = APP_PATH.'/application/dynamic-reference'; //你想要哪个文件夹下面的注释生成对应的API文档
$swagger = \Swagger\scan($path);
$swagger_json_path = APP_PATH.'/swagger-docs/swagger.json';
// 检测模板目录
$dir = dirname($swagger_json_path);
if (!is_dir($dir)) {
mkdir($dir, 0755, true);
}
// 更新文档
$myfile = fopen($swagger_json_path, "w") or die("Unable to open file!");
$swagger=json_encode($swagger, true);
fwrite($myfile, $swagger);
fclose($myfile);
// 跳转到文档页面
$this->redirect('/swagger-ui/index.html');
}
}
5.下载swagger-ui
执行下面命令
git clone https://github.com/swagger-api/swagger-ui.git
克隆下来后将dist文件夹内的文件 复制到例如public目录下新建文件夹Swagger-Ui中,修改Swagger-Ui中的index.html文件
<script>
window.onload = function () {
// Begin Swagger UI call region
const ui = SwaggerUIBundle({
url: "/swagger",//swagger.json数据api接口
dom_id: '#swagger-ui',
deepLinking: true,
presets: [
SwaggerUIBundle.presets.apis,
SwaggerUIStandalonePreset
],
plugins: [
SwaggerUIBundle.plugins.DownloadUrl
],
layout: "StandaloneLayout"
})
// End Swagger UI call region
window.ui = ui
}
</script>
在控制器中新建方法,使上方文档能读取到json数据
public function swagger()
{
echo file_get_contents(APP_PATH . '/swagger-docs/swagger.json');
}