thinkphp swagger 导入 apiFox 无效

新升级了 apiFox 发现 api 导入无效, 但是 swaager ui 能正常展示, 同时直接方位链接是 ok 的

一直报错, 数据类型不对, 后来通过观察接口发现, 直接用链接访问的 api.json 文件后面有一段 html 片段

解决方案

  1. 使用 exit 强行中断调试信息输出
1
2
3
4
5
6
7
8
Route::get('/swagger/api', function () {
ob_start(); // 开始输出缓冲
$openapi = \OpenApi\Generator::scan(['../app/api']);
ob_end_clean(); // 清除输出缓冲
header('Content-Type: application/json');
echo $openapi->toJson();
exit;
})->middleware(\app\middleware\DebugMiddleware::class)->cache(3600);
  1. 使用路由中间件, 在特定的路由里面关闭访问
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
<?php

// app/middleware/DebugMiddleware.php

namespace app\middleware;

class DebugMiddleware
{
public function handle($request, \Closure $next)
{
// 在这里判断是否需要显示调试信息
if ($this->shouldDisplayDebugInfo($request)) {
// 开启调试模式
config(['app_debug' => true]);
} else {
// 关闭调试模式
config(['app_debug' => false]);
}

return $next($request);
}

protected function shouldDisplayDebugInfo($request)
{
// 根据你的逻辑判断是否需要显示调试信息
// 这里可以根据请求的 URL、参数等来决定
// 返回 true 表示显示调试信息,返回 false 表示不显示
return false; // 你的判断逻辑
}
}

我这里强制使用了 false 是因为我仅仅需要用的时候才手动的关闭调试, 其他的接口 还是进行统一管理