Swagger 和 Swagger-ui 是完全分离的两个项目:
1.0> Swagger用于扫描Controller,并生成 json 格式的扫描结果(即swagger.json
文件);
官网:https://zircote.github.io/swagger-php/
GitHub:https://github.com/zircote/swagger-php
2.0> Swagger-ui用于可视化的显示swagger.json
文件;
官网:https://swagger.io/tools/swagger-ui/
Github:https://github.com/swagger-api/swagger-ui
1.0> 从 GitHub 下载 swagger-ui 的 dist:
2.0> 在项目 public 目录下新建 swagger-ui目录,将 dist 中的文件放入其中:
3.0> 现在,通过 /swagger-ui/index.html 即可访问到 swagger-ui 的页面;swagger-ui 默认加载的 swagger.json
是 https://petstore.swagger.io/v2/swagger.json
,如下:
4.0> 将swagger-ui
默认加载的 swagger.json
修改成你自己项目生成的 swagger.json
地址,如下:
5.0> Swagger-ui的UI界面比较丑,你可以编辑 /dist/index.html,以调整其样式:
1.0> 安装Swagger
composer require zircote/swagger-php
2.0> 生成 swagger.json
文件
如下,当请求 /doc
时,扫描所有 Controller
,并将扫描结果写入到 public/swagger.json
文件中,然后打开 swagger-ui
页面;
注:每次请求 /doc 时会重新扫描 Controller;如果直接打开 swagger-ui 页面,则只会从public目录下读取已生成的swaager.json文件;
<?php
namespace app\controller;
use OpenApi\Generator;
use app\BaseController;
class App extends BaseController {
public function doc(){
// 扫描 Controller 文件夹
$openapi = Generator::scan(['../app/controller']);
header('Content-Type: application/x-yaml');
// 获取扫描结果
$result = $openapi->toYaml();
// 将扫描结果写入到 public/swagger-ui/swagger.json 文件中
$jsonString = $_SERVER['DOCUMENT_ROOT'].'/swagger-ui/swagger.json';
$res = file_put_contents($jsonString,$result);
// 打开 swagger-ui 页面
if ($res == true) {
return redirect('https://service.admin.sidoc.vip/swagger-ui/index.html');
}
}
}