讲师中心 微信公众号
AI工具推荐 视频效率加速

Laravel如何做API文档_Laravel注释生成接口文档【说明】

梦宇吖_3286

梦宇吖_3286

发布时间:2026-05-01 16:43:26

|

457人浏览过

|

来源于php中文网

原创

必须先安装 darkaonline/l5-swagger 包,否则 @OA\Get 等注解无效;需匹配 Laravel 版本(Laravel 11 用 ^8.4+),发布配置后正确设置 paths.annotations,并确保注解路径、参数名与 routes/api.php 完全一致,手动定义 @OA\Schema 响应体,启用 SWAGGER_UI_ENABLED 并确认路由存在。

laravel如何做api文档_laravel注释生成接口文档【说明】

用 @OA\Get 这类注解前,先装好 darkaonline/l5-swagger

不装这个包,写再多 @OA\Get、@OA\Parameter 注解都没用——Laravel 不会识别,php artisan l5-swagger:generate 会直接报错说找不到类。它不是 Laravel 自带的,也不是 PHP-FIG 标准,纯靠这个包把注解翻译成 OpenAPI JSON。

安装时注意 Laravel 版本匹配:darkaonline/l5-swagger:^8.0 对应 Laravel 9/10;Laravel 11 要用 ^8.4 以上(否则 config/l5-swagger.php 里 routes.api 配置项会失效)。

  • 运行 composer require "darkaonline/l5-swagger:^8.4" 后,务必执行 php artisan vendor:publish --provider="L5Swagger\L5SwaggerServiceProvider"
  • 发布后检查 config/l5-swagger.php 中的 paths.annotations,默认是 app/Http/Controllers,如果你的 API 控制器在 app/Http/Controllers/Api/V1,得手动加进去,不然扫描不到
  • 别在 routes/web.php 里写 API 注解——路由没注册到 API 中间件组,Swagger UI 点“Try it out”会 401 或 404

@OA\Get 和 @OA\Post 必须和路由定义对齐

注解不是装饰品,它得和 routes/api.php 里的实际路由完全一致:HTTP 方法、URL 路径、参数占位符名称,一个字符都不能差。比如路由写的是 Route::get('/users/{id}', [UserController::class, 'show']),那注解里的 path="/users/{id}" 就不能写成 /users/{user_id},否则 Swagger UI 里生成的请求 URL 是错的,调试时永远 404。

  • 路径参数名必须一致:{id} 就是 {id},别改成 {userId},哪怕变量名在方法里叫 $userId
  • 查询参数(?page=1&sort=name)要用 @OA\Parameter(name="page", in="query", ...) 显式声明,不写就不会出现在文档的“Parameters”面板里
  • 如果路由用了前缀如 Route::prefix('api/v1')->group(...),注解里的 path 就只写 /users,不要重复写 /api/v1/users,否则生成的路径会变成双份前缀

@OA\Schema 定义响应体时,别直接引用 Eloquent 模型类

@OA\Schema(ref="#/components/schemas/User") 看起来省事,但一旦模型字段动态变化(比如加了 appends、改了 $casts、用了 makeHidden),文档就和真实返回不一致。Swagger 不会运行 PHP 代码去反射模型,它只认你手写的 @OA\Property。

laravel-specialist
laravel-specialist

精通 Laravel 10+,遵循现代 PHP 实践的 Laravel 专家。擅长优雅语法、Eloquent ORM、队列系统及企业级特性...

下载

更麻烦的是:Eloquent 的 $dates、$casts、访问器(accessor)不会自动转成 OpenAPI 类型。比如 is_active 是 tinyint(1),PHP 返回布尔值,但没声明 type="boolean",Swagger 就当它是整数,前端 Typescript 生成器会产出错误类型。

  • 响应体老实用 @OA\Schema + @OA\Property 手动列字段,尤其注意 type 和 format(date-time 不能写成 datetime)
  • 数组字段写 @OA\Property(type="array", @OA\Items(type="string")),别漏掉 @OA\Items,否则 Swagger UI 显示 “unknown type”
  • 如果返回的是资源集合(UserResource::collection()),注解里要写 @OA\Response(... @OA\JsonContent(type="array", @OA\Items(ref="#/components/schemas/User"))),不是直接 ref 到单个 schema

生成文档后打不开 UI?检查 SWAGGER_UI_ENABLED 和中间件

运行 php artisan l5-swagger:generate 成功,不代表能访问 /api/documentation。默认配置下,这个路由只在 APP_ENV=local 时启用,生产环境直接 404。另外,Laravel 10+ 默认加了 PreventRequestsDuringMaintenance 中间件,如果站点进了维护模式,Swagger UI 也进不去,但错误提示是 503,容易误判为配置问题。

  • 临时开启:在 .env 加 SWAGGER_UI_ENABLED=true,并确保 APP_ENV=local 或在 config/l5-swagger.php 里把 swagger_ui_enabled 设为 true
  • 访问路径是 /api/documentation(不是 /docs 或 /swagger),且必须走 HTTPS(如果 APP_URL 配了 https)
  • 如果用了 Sanctum 或 Passport,Swagger UI 的 “Authorize” 按钮点开后填的是 Bearer Token,但实际请求头要加 Authorization: Bearer xxx,少个空格或大小写错误都会 401

最常被忽略的是:注解写在控制器方法里,但那个方法根本没被路由指向——生成的 JSON 里压根没有这条接口,UI 上自然看不到。别只盯着注解语法,先 php artisan route:list | grep users 确认路由存在。

热门AI工具

更多
PixTV
PixTV Hot

PixTV是一款面向AIGC内容创作的AI视频生成工具。

PixPix
PixPix Hot

PixPix是一款面向电商视觉生产的AI商品图生成工具。

VibeKnow
VibeKnow Hot

一款AI视频创作工具,主要用于全球首个AI知识视频创作平台,文档、文章、网页,一键生成视频,适合需要提升相关任务效率的用户。

UpDream
UpDream Hot

一款AI视频创作工具,主要用于哔哩哔哩推出的自研AI视频创作工具,适合需要提升相关任务效率的用户。

Atoms
Atoms Hot

Atoms是一款AI智能体工具,第一支自动构建真实业务的 AI 团队。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

UP简历
UP简历 Hot

一款AI办公效率工具,主要用于基于AI技术的免费在线简历制作工具,适合需要提升相关任务效率的用户。

相关专题

更多
laravel组件介绍
laravel组件介绍

laravel 提供了丰富的组件,包括身份验证、模板引擎、缓存、命令行工具、数据库交互、对象关系映射器、事件处理、文件操作、电子邮件发送、队列管理和数据验证。想了解更多laravel的相关内容,可以阅读本专题下面的文章。

857

2024.04.09

laravel中间件介绍
laravel中间件介绍

laravel 中间件分为五种类型:全局、路由、组、终止和自定。想了解更多laravel中间件的相关内容,可以阅读本专题下面的文章。

855

2024.04.09

laravel使用的设计模式有哪些
laravel使用的设计模式有哪些

laravel使用的设计模式有:1、单例模式;2、工厂方法模式;3、建造者模式;4、适配器模式;5、装饰器模式;6、策略模式;7、观察者模式。想了解更多laravel的相关内容,可以阅读本专题下面的文章。

2508

2024.04.09

thinkphp和laravel哪个简单
thinkphp和laravel哪个简单

对于初学者来说,laravel 的入门门槛较低,更易上手,原因包括:1. 更简单的安装和配置;2. 丰富的文档和社区支持;3. 简洁易懂的语法和 api;4. 平缓的学习曲线。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

4401

2024.04.10

laravel入门教程
laravel入门教程

本专题整合了laravel入门教程,想了解更多详细内容,请阅读专题下面的文章。

6390

2025.08.05

laravel实战教程
laravel实战教程

本专题整合了laravel实战教程,阅读专题下面的文章了解更多详细内容。

4216

2025.08.05

laravel面试题
laravel面试题

本专题整合了laravel面试题相关内容,阅读专题下面的文章了解更多详细内容。

7909

2025.08.05

PHP高性能API设计与Laravel服务架构实践
PHP高性能API设计与Laravel服务架构实践

本专题围绕 PHP 在现代 Web 后端开发中的高性能实践展开,重点讲解基于 Laravel 框架构建可扩展 API 服务的核心方法。内容涵盖路由与中间件机制、服务容器与依赖注入、接口版本管理、缓存策略设计以及队列异步处理方案。同时结合高并发场景,深入分析性能瓶颈定位与优化思路,帮助开发者构建稳定、高效、易维护的 PHP 后端服务体系。

1496

2026.03.04

Gradle插件开发入门教程
Gradle插件开发入门教程

本专题介绍Gradle插件开发的基本流程,涵盖插件类编写、自定义任务注册、扩展参数设计和插件应用方法,帮助你理解插件如何组织构建逻辑,减少多个项目之间的重复配置。

60

2026.10.22

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
如何安装 Composer
如何安装 Composer

共1课时 | 213人学习

Composer手册
Composer手册

共0课时 | 0人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn