avatar

mdo

Hello

  • 首页
  • 知识库
  • 归档
  • 标签
  • 关于
主页 Thinkphp8.1项目集成swagger
文章

Thinkphp8.1项目集成swagger

发表于 2025-10-31 更新于 2025-10- 31
作者 mdo
6~8 分钟 阅读

注意:swagger-php 5.x 默认只支持 PHP 属性注解,不再推荐/默认支持 PHPDoc 注释!

1、 使用composer安装swagger-php

`composer require zircote/swagger-php` 

2、 验证安装:

`./vendor/bin/openapi --version` 

3、 在控制器目录controller下新建类Swagger.php:

`<?php

namespace appcontroller;
use OpenApiAttributes as OA;

#[OAInfo(
    title: "THINKPHP8 API文档",
    version: "1.0.1",
    description: "THINKPHP8项目接口文档",
    contact: new OAContact(
        name: "THINKPHP8",
        email: "support@xxx.com",
        url: "https://xxx.com"
    )
)]
#[OATag(
    name: "Index",
    description: "首页相关接口"
)]
#[OATag(
    name: "Merchant",
    description: "商户相关接口"
)]
class Swagger
{

}` 

![](https://csdnimg.cn/release/blogv2/dist/pc/img/runCode/icon-arrowwhite.png)

4、 在需要扫描的控制器类(Merchant.php)中加入注解:

`<?php
namespace appcontroller;
use OpenApiAttributes as OA;
class Merchant extends BaseApp
{
#[OAPost(
        path: "/api/merchant/register",
        summary: "商户注册",
        tags: ["Merchant"],
        requestBody: new OARequestBody(
            required: true,
            content: new OAJsonContent(
                required: ["email", "password", "timestamp", "sign"],
                properties: [
                    new OAProperty(property: "email", type: "string", description: "邮箱"),
                    new OAProperty(property: "password", type: "string", description: "密码"),
                    new OAProperty(property: "timestamp", type: "integer", description: "时间戳"),
                    new OAProperty(property: "sign", type: "string", description: "签名"),
                ]
            )
        ),
        responses: [
            new OAResponse(
                response: 200,
                description: "注册成功"
            ),
            new OAResponse(
                response: 400,
                description: "参数错误或签名失败"
            )
        ]
    )]
public function register()
    {
    }
}` 

![](https://csdnimg.cn/release/blogv2/dist/pc/img/runCode/icon-arrowwhite.png)

5、 运行扫描命令,自动扫描并生成public目录下的swagger.json文件:

`./vendor/bin/openapi --output ./public/swagger.json ./app/controller` 

6、 下载swagger-ui,以便可以可视化呈现接口文档:
下载最新版本的swagger-ui文件,通常是dist.zip压缩包,解压后复制到项目public目录下,并修改swagger-initializer.js文件,将资源指向swagger.json

`window.ui = SwaggerUIBundle({
    url: "/swagger.json",
    dom_id: '#swagger-ui',
    deepLinking: true,
    presets: [
      SwaggerUIBundle.presets.apis,
      SwaggerUIStandalonePreset
    ],
    plugins: [
      SwaggerUIBundle.plugins.DownloadUrl
    ],
    layout: "StandaloneLayout"
  });` 

![](https://csdnimg.cn/release/blogv2/dist/pc/img/runCode/icon-arrowwhite.png)

7、 运行或部署项目后,可访问127.0.0.1/swagger-ui/#/,即可看到接口文档。

知识库
Thinkphp
许可协议:  CC BY 4.0
分享

相关文章

10月 7, 2026

比尔盖茨的智慧:想多赚钱,就每天循环做这3件事

我们总有一种非常固执的错觉,认为那些站在财富金字塔顶端的人,必然拥有某种超越常人的特异功能。我们在脑海中给比尔盖茨这样的大佬描绘了一幅极其悲壮的奋斗画像。大家总觉得,他之所以能富可敌国,肯定是因为他每天只睡三个小时,同时对着八个电脑屏幕疯狂敲击键盘,每一秒钟都在做出价值几亿美金的生死抉择。 为了模仿

9月 28, 2026

程序员越想创业,越不要急着动手

一个能源方面的前辈找到我,希望通过我把一些人工的工作 AI 自动化。 能源方面我不懂,找 Gemini 聊完发现这个是可以复制的,非常兴奋。我跟老婆说,这个项目做好以后可以做成平台,推广到其他公司,你就等着做总裁夫人吧! 她听完以后跟我说,这个项目还是太定制化,和我之前做的一个项目很像。 那个项目一

9月 25, 2026

忍了一年多,我终于对i18n下手了过去一年,我主要参与国际机票业务的开发工作,因此每天都要和多语言(i18n)打交道

前言 大家好,我是奈德丽。 过去一年,我主要参与国际机票业务的开发工作,因此每天都要和多语言(i18n)打交道。熟悉我的朋友都知道,我这个人比较“惜力”(并不是,实际上只是忍不下去了),对于重复笨拙的工作非常抵触,于是,我开始思考如何优化团队的多语言管理模式。 痛点背景 先说说我们在机票项目中遇到的

下一篇

PHP使用swagger

上一篇

日报完全自动化的

最近更新

  • 比尔盖茨的智慧:想多赚钱,就每天循环做这3件事
  • iOS 侧载(Sideloading)工具
  • 程序员越想创业,越不要急着动手
  • 注册 Chat Participant
  • 中秋给在外游子的一封信

热门标签

API CodeGeex Coding Cursor DeepSeek Docker Gitkraken Harness Laravel Management

目录

©2026 mdo. 保留部分权利。