composer如何安装并在项目中使用Swagger生成API文档_composer实战教程【教程】
发布时间 - 2026-01-18 00:00:00 点击率:次应安装 zircote/swagger-php:composer require zircote/swagger-php;生成命令为 ./vendor/bin/swagger [源码路径] --output [输出目录];注解须统一用 @OA\ 前缀,JSON 需通过 Swagger UI 静态托管访问。
Composer 本身不提供 Swagger 文档生成功能,它只是 PHP 的依赖管理工具;真正生成文档的是 swagger-php(注解式)或 zircote/swagger-php(官方维护分支),配合 swagger-ui 渲染。直接运行 composer install swagger 会失败——因为没这个包。
如何用 Composer 安装 swagger-php 并支持注解解析
必须安装的是 zircote/swagger-php,它是目前主流的 PHP 注解驱动 Swagger/OpenAPI 生成器。它不依赖 Laravel 或 Symfony,但需要 PHP 7.4+ 和反射扩展启用。
- 在项目根目录执行:
composer require zircote/swagger-php
- 确保你的 PHP 环境已启用
php-json和php-reflection扩展(绝大多数环境默认开启) - 不要安装
swagger-api/swagger-php(已废弃,最后更新于 2016 年) - 如果项目用 Laravel,可额外加
darkaonline/l5-swagger,但它本质是封装了zircote/swagger-php+ UI 集成
生成 JSON 文档时常见的路径与命令错误
swagger-php 是命令行工具,但不是全局命令;它由 Composer 自动注册到 vendor/bin/swagger。直接敲 swagger 会报“command not found”,除非你配置了 $PATH。
- 正确调用方式(推荐相对路径):
./vendor/bin/swagger app/Http/Controllers --output storage/api-docs
-
app/Http/Controllers是 Laravel 典型控制器路径;请按你实际代码结构替换,例如src/Api或modules/v1 - 输出目录(
--output)必须存在且可写,否则报failed to open stream: Permission denied - 若提示
Class 'OpenApi\Annotations\OpenApi' not found,说明用了旧版注解命名空间,应统一为@OA\OpenApi(对应use OpenApi\Annotations as OA;)
如何让生成的 JSON 被 Swagger UI 正确加载
生成的 openapi.json 只是数据,需前端 UI 渲染。Swagger UI 不是 PHP 包,不能靠 Composer 自动部署;常见做法是静态托管或反向代理。
- 下载最新 Swagger UI:从 GitHub Releases 解压
dist/目录到项目public/swagger-ui/ - 在
public/swagger-ui/index.html中修改url指向你的 JSON 路径,例如:url: "/storage/api-docs/openapi.json"
- 确保 Web 服务器允许访问
storage/api-docs/(Laravel 默认禁止,需在public/storage建软链或配置 Nginx alias) - 别把
openapi.json放在storage/app/下——它不在公开路径,Nginx/Apache 默认拒访
最易被忽略的是注解语法版本和 OpenAPI 版本绑定关系:@OA\Get 对应 OpenAPI 3.x,不兼容 Swagger 2.0 注解(如 @SWG\Get);混用会导致解析中断且无明确报错。检查你所有控制器注解是否全部以 @OA\ 开头,并确认 zircote/swagger-php 版本 ≥ 4.0。
# php
# laravel
# html
# js
# 前端
# git
# json
# composer
# apache
# github
# nginx
# symfony
# 命名空间
# 封装
# require
# class
# public
# Reflection
# http
# ui
# 的是
# 文档
# 会报
# 放在
# 它是
# 用了
# 最后更新
# 报错
# 但它
# 请按
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
小视频制作网站有哪些,有什么看国内小视频的网站,求推荐?
如何在IIS中新建站点并解决端口绑定冲突?
JavaScript如何实现类型判断_typeof和instanceof有什么区别
laravel怎么为API路由添加签名中间件保护_laravel API路由签名中间件保护方法
怎样使用JSON进行数据交换_它有什么限制
黑客如何通过漏洞一步步攻陷网站服务器?
简单实现Android验证码
Win11怎样安装网易有道词典_Win11安装词典教程【步骤】
车管所网站制作流程,交警当场开简易程序处罚决定书,在交警网站查询不到怎么办?
微信小程序 canvas开发实例及注意事项
Laravel如何处理JSON字段的查询和更新_Laravel JSON列操作与查询技巧
Laravel如何实现模型的全局作用域?(Global Scope示例)
如何在建站之星绑定自定义域名?
如何自己制作一个网站链接,如何制作一个企业网站,建设网站的基本步骤有哪些?
详解Android——蓝牙技术 带你实现终端间数据传输
Win11怎么关闭资讯和兴趣_Windows11任务栏设置隐藏小组件
详解一款开源免费的.NET文档操作组件DocX(.NET组件介绍之一)
如何批量查询域名的建站时间记录?
Python文件异常处理策略_健壮性说明【指导】
如何挑选高效建站主机与优质域名?
Laravel如何处理文件上传_Laravel Storage门面实现文件存储与管理
Win11摄像头无法使用怎么办_Win11相机隐私权限开启教程【详解】
Laravel的路由模型绑定怎么用_Laravel Route Model Binding简化控制器逻辑
如何在自有机房高效搭建专业网站?
三星网站视频制作教程下载,三星w23网页如何全屏?
微信小程序制作网站有哪些,微信小程序需要做网站吗?
微信公众帐号开发教程之图文消息全攻略
网站建设保证美观性,需要考虑的几点问题!
Laravel怎么返回JSON格式数据_Laravel API资源Response响应格式化【技巧】
百度输入法ai组件怎么删除 百度输入法ai组件移除工具
node.js报错:Cannot find module 'ejs'的解决办法
Laravel如何实现事件和监听器?(Event & Listener实战)
如何在腾讯云服务器上快速搭建个人网站?
Laravel如何实现API版本控制_Laravel API版本化路由设计策略
如何挑选优质建站一级代理提升网站排名?
网站页面设计需要考虑到这些问题
如何在阿里云虚拟服务器快速搭建网站?
油猴 教程,油猴搜脚本为什么会网页无法显示?
香港服务器网站推广:SEO优化与外贸独立站搭建策略
Laravel中间件如何使用_Laravel自定义中间件实现权限控制
HTML5建模怎么导出为FBX格式_FBX格式兼容性及导出步骤【指南】
打开php文件提示内存不足_怎么调整php内存限制【解决方案】
如何用VPS主机快速搭建个人网站?
Midjourney怎样加参数调细节_Midjourney参数调整技巧【指南】
阿里云高弹*务器配置方案|支持分布式架构与多节点部署
网页设计与网站制作内容,怎样注册网站?
Python3.6正式版新特性预览
QQ浏览器网页版登录入口 个人中心在线进入
网站制作免费,什么网站能看正片电影?
php485函数参数是什么意思_php485各参数详细说明【介绍】


