Laravel中如何为Swagger所有请求添加全局请求头?
实现Laravel Swagger全局统一添加请求头
方法一:全局注解配置(推荐,无需逐个修改接口)
通过创建全局Swagger注解文件,让所有接口自动继承这两个请求头:
- 创建全局注解类
在app/Http/Controllers/Swagger目录下新建GlobalHeaders.php文件,内容如下:
<?php namespace App\Http\Controllers\Swagger; /** * @OA\Parameter( * name="x-session-id", * in="header", * required=true, * @OA\Schema(type="string"), * description="会话ID,取自Swagger授权会话" * ) * @OA\Parameter( * name="X-Requested-With", * in="header", * required=true, * @OA\Schema(type="string", default="X-Requested-With"), * description="固定请求头标识" * ) */ class GlobalHeaders { // 空类,仅用于承载全局Swagger注解 }
- 配置Swagger扫描该文件
打开config/l5-swagger.php,找到annotations数组,添加全局注解类的路径:
'annotations' => [ base_path('app/Http/Controllers'), base_path('app/Http/Controllers/Swagger/GlobalHeaders.php'), // 添加此行 ],
- 重新生成Swagger文档
执行Artisan命令更新文档:
php artisan l5-swagger:generate
完成后所有接口都会自动带上这两个请求头。
方法二:Swagger UI自动填充请求头值
如果需要让Swagger UI自动将授权会话ID填充到x-session-id头中,可修改UI的请求拦截配置:
打开config/l5-swagger.php,找到ui配置项,添加requestInterceptor:
'ui' => [ // 其他原有配置... 'requestInterceptor' => "() => { // 根据你的授权逻辑调整会话ID的存储键名 const sessionId = localStorage.getItem('swagger_auth_session'); return { headers: { 'x-session-id': sessionId || '', 'X-Requested-With': 'X-Requested-With' } }; }", ],
刷新Swagger UI页面后,发送请求时会自动携带这两个请求头。
方法三:单个接口手动添加(适合特殊场景)
如果仅需给部分接口添加,可直接在接口注解中补充请求头参数:
/** * * @OA\Get( * path="/place/list", * tags={"Lugares"}, * summary="Get places", * // 新增请求头参数 * @OA\Parameter( * name="x-session-id", * in="header", * required=true, * @OA\Schema(type="string"), * description="会话ID,取自Swagger授权会话" * ), * @OA\Parameter( * name="X-Requested-With", * in="header", * required=true, * @OA\Schema(type="string", default="X-Requested-With"), * description="固定请求头标识" * ), * @OA\Response( * response=200, * description="Get places list" * ), * @OA\Response( * response="default", * description="An error occurred." * ) * ) */ public function list() { $session = session()->get('rismi2_session_data'); $selDominioId = $session['sel_dominio.id']; $plantas = $this->placeRepository->getPlace($selDominioId); return placeResource::make($plantas); }
内容的提问来源于stack exchange,提问作者Juan Pablo B
相关产品推荐
相关产品推荐

