thinkphp swagger 导入 apiFox 无效
新升级了 apiFox 发现 api 导入无效, 但是 swaager ui 能正常展示, 同时直接方位链接是 ok 的
一直报错, 数据类型不对, 后来通过观察接口发现, 直接用链接访问的 api.json 文件后面有一段 html 片段
解决方案
- 使用 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 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 是因为我仅仅需要用的时候才手动的关闭调试, 其他的接口 还是进行统一管理