Yii2中怎么使用Swagger生成API文档_zircote/swagger-php集成【指南】

絕刀狂花

絕刀狂花

2026-04-08

546人浏览

原创

@oa\get注解不生效主因是文件未被swagger-php扫描到,需确保注解位于控制器方法上方、文件含@oa\info等激活注解,并显式指定源码路径;swagger不读取yii2路由规则,路径须硬编码且与实际请求完全一致。

yii2中怎么使用swagger生成api文档_zircote/swagger-php集成【指南】

为什么 @OA\Get 注解不生效,生成的文档里没接口?

根本原因通常是 PHP 文件没被 zircote/swagger-php 扫描到——它只解析带 @OA\ 注解的 PHP 类/方法,且默认不递归扫描 vendor 或未在配置中声明的路径。

  • 确认注解写在控制器方法上方(不是 action 方法内部),且类已用 @OA\Info 或至少一个 @OA\PathItem 开头的注解“激活”了该文件
  • 运行生成命令时,显式指定源码目录:php vendor/bin/openapi --output docs/api.json api/controllers/,别依赖自动发现
  • Yii2 控制器常继承 yii\rest\ActiveController,但 zircote/swagger-php 不会自动识别其动作映射;必须为每个公开接口手动加 @OA\Get / @OA\Post 等注解,不能只靠路由规则
  • 检查是否用了短数组语法 [] 而非 array() —— 旧版 PHP(如 5.4 以下)会直接跳过注解解析,报错但不提示

SwaggerUiAsset 加载后页面空白或 404?

这是 Yii2 资源发布和路径映射最常翻车的地方:Swagger UI 的静态资源没正确暴露到 Web 可访问路径。

Yii Framework 2.0.51
Yii Framework 2.0.51

下载 Yii Framework 2.0.51 官方 Basic 应用模板,查看 Composer 安装方式、版本信息与开发文档。

下载
  • 不要把 swagger-ui-dist 直接丢进 @webroot 下手动链接——Yii2 资源包机制会覆盖或冲突
  • 必须定义自定义 AssetBundle,继承 yii\web\AssetBundle,并在 $sourcePath 指向 vendor/swagger-api/swagger-ui/dist,再通过 publishOptions['forceCopy'] = true 强制复制
  • 确保 AppAsset 或布局文件中调用了 SwaggerUiAsset::register($this),且注册时机在 head 区域(否则 JS 报 SwaggerUIBundle is not defined
  • 浏览器 F12 查 Network,看 /assets/xxx/swagger-ui-bundle.js 是否返回 200;如果 404,说明资源未发布成功,删掉 @web/assets 目录重试

如何让 Swagger 自动读取 Yii2 的 rules 路由配置?

不能。Swagger-php 是静态分析工具,完全不感知 Yii2 运行时的 URL 规则、模块嵌套或 UrlManager 配置。所有路径必须硬编码在注解里。

  • @OA\Get(path="/v1/users") 中的 /v1/users 必须和实际请求路径完全一致(含前缀、斜杠结尾等),不能写成 /users 然后指望 Yii2 自动补 v1
  • 若项目启用了 'suffix' => '.json',路径就得写成 /v1/users.json,否则文档和真实接口对不上
  • 参数绑定如 <code>id 在路由中是 <code><id:></id:>,但 Swagger 注解里只需声明 @OA\Parameter(name="id", in="path", required=true, @OA\Schema(type="integer")),不用管正则
  • 想减少重复?用 PHP 常量或配置项拼接路径字符串,例如 path=API_V1_PREFIX."/users",但注意注解值必须是字面量,不能是变量表达式

生成的 JSON 文档里 securitySchemes 不显示 Bearer Auth?

因为 @OA\SecurityScheme 必须定义在文件级(类上方),且需在接口注解中显式引用,Yii2 的行为过滤器(如 authenticator)不会被自动提取。

  • 在任意一个控制器类顶部加:@OA\SecurityScheme(securityScheme="BearerAuth", type="http", scheme="bearer", bearerFormat="JWT")
  • 每个需要鉴权的接口,加上 @OA\Security(requirements={{"BearerAuth"={}}})
  • 如果用了自定义 Header(比如 X-API-Key),scheme 改成 apiKey,并设 in="header"name="X-API-Key"
  • 注意大小写:securityScheme 名称(这里是 "BearerAuth")必须和 @OA\Security 里的 key 完全一致,否则关联失败
事情说清了就结束。最麻烦的是注解路径和 Yii2 路由前缀的对齐,以及资源发布那步——多试两次 rm -rf @web/assets/*,比查文档快。

大量免费API接口:立即使用
涵盖生活服务API、金融科技API、企业工商API、等相关的API接口服务。免费API接口可安全、合规地连接上下游,为数据API应用能力赋能!

相关专题

更多
json数据格式
json数据格式

JSON是一种轻量级的数据交换格式。本专题为大家带来json数据格式相关文章,帮助大家解决问题。

2023.08.07

1533

5

json是什么
json是什么

JSON是一种轻量级的数据交换格式,具有简洁、易读、跨平台和语言的特点,JSON数据是通过键值对的方式进行组织,其中键是字符串,值可以是字符串、数值、布尔值、数组、对象或者null,在Web开发、数据交换和配置文件等方面得到广泛应用。本专题为大家提供json相关的文章、下载、课程内容,供大家免费下载体验。

2023.08.23

1378

1

jquery怎么操作json
jquery怎么操作json

操作的方法有:1、“$.parseJSON(jsonString)”2、“$.getJSON(url, data, success)”;3、“$.each(obj, callback)”;4、“$.ajax()”。更多jquery怎么操作json的详细内容,可以访问本专题下面的文章。

2023.10.13

586

3

go语言处理json数据方法
go语言处理json数据方法

本专题整合了go语言中处理json数据方法,阅读专题下面的文章了解更多详细内容。

2025.09.10

1289

7

java基础知识汇总
java基础知识汇总

java基础知识有Java的历史和特点、Java的开发环境、Java的基本数据类型、变量和常量、运算符和表达式、控制语句、数组和字符串等等知识点。想要知道更多关于java基础知识的朋友,请阅读本专题下面的的有关文章,欢迎大家来php中文网学习。

2023.10.24

3264

49

js 字符串转数组
js 字符串转数组

js字符串转数组的方法:1、使用“split()”方法;2、使用“Array.from()”方法;3、使用for循环遍历;4、使用“Array.split()”方法。本专题为大家提供js字符串转数组的相关的文章、下载、课程内容,供大家免费下载体验。

2023.08.03

1153

5

js截取字符串的方法
js截取字符串的方法

js截取字符串的方法有substring()方法、substr()方法、slice()方法、split()方法和slice()方法。本专题为大家提供字符串相关的文章、下载、课程内容,供大家免费下载体验。

2023.09.04

1211

5

java基础知识汇总
java基础知识汇总

java基础知识有Java的历史和特点、Java的开发环境、Java的基本数据类型、变量和常量、运算符和表达式、控制语句、数组和字符串等等知识点。想要知道更多关于java基础知识的朋友,请阅读本专题下面的的有关文章,欢迎大家来php中文网学习。

2023.10.24

3264

49

字符串介绍
字符串介绍

字符串是一种数据类型,它可以是任何文本,包括字母、数字、符号等。字符串可以由不同的字符组成,例如空格、标点符号、数字等。在编程中,字符串通常用引号括起来,如单引号、双引号或反引号。想了解更多字符串的相关内容,可以阅读本专题下面的文章。

2023.11.24

2165

6

热门下载

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

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Yii Framework 2.0 API 官方文档
Yii Framework 2.0 API 官方文档

共0课时 | 0人学习

Yii2.0框架开发实战视频教程
Yii2.0框架开发实战视频教程

共22课时 | 9.1万人学习