当前位置: 首页 > news >正文

tp6 + swagger 配置文档接口

ThinkPHP 6.0

运行环境要求PHP7.2+,兼容PHP8.1

安装

composer create-project topthink/think tp 6.0.*

如果需要更新框架使用

composer update topthink/framework

文档

完全开发手册

swagger

文档

注解文档

安装包

composer require zircote/swagger-php

引用swagger-ui

下载ui

git clone https://github.com/swagger-api/swagger-ui.git

下载到public下,后续访问要使用到。

可以重命名,比如apidoc。

修改swagger-ui/dist/index.html

window.onload = function() {window.ui = SwaggerUIBundle({url: "/localhost:8000/swagger.json",dom_id: '#swagger-ui',deepLinking: true,presets: [SwaggerUIBundle.presets.apis,SwaggerUIStandalonePreset],plugins: [SwaggerUIBundle.plugins.DownloadUrl],layout: "StandaloneLayout"});
};
生成swagger.json
第一种方式,手动命令行生成

./vendor/bin/openapi ./app/controller -o ./public/swagger.json

第二种方式,调用方法

建立路由

route/app.php

Route::group("index", function () {Route::rule('doc/[:isToJson]', 'doc');Route::rule('hello/[:name]', 'hello');Route::rule('index', 'index');
});

控制器
app/controller/Index.php

注释文档示例

<?php
namespace app\controller;use app\BaseController;
use OpenApi\Annotations as OA;
use think\facade\View;/*** @OA\Info(title="My First API", version="0.1")*/
class Index extends BaseController
{/*** @OA\Get(*     path="/index/index",*     tags={"index"},*     summary="接口名称",*     description="接口描述",*     @OA\Response(response="200", description="An example resource")* )*/public function index(){return view("index");}/*** @OA\Get(*     path="/index/hello/:name",*     tags={"index"},*     summary="输出hello+谁",*     @OA\Parameter(*         in="query",*         required=true,*         name="name",*         @OA\Schema(type="string"),*         description="名称"*     ),*     @OA\Response(response="200", description="An example resource")* )*/public function hello($name = 'ThinkPHP6'){return 'hello,' . $name;}public function doc(bool $isToJson = false){$openapi = \OpenApi\Generator::scan(['../app/controller']);header('Content-Type: application/x-json');if($isToJson) {return $openapi->toJson();}$res = file_put_contents('../public/swagger.json', $openapi->toJson());if ($res !== false) {
//            return redirect("localhost:${port}/docapi/index.html?port=${port}&docapi=${docapi}");return view();}return '没有文档';}// 空控制器public function __call($method, $args) {return 'error request';}
}

配置模板全局变量
config/view.php 最后加上

'tpl_replace_string' => ['__SWAGGER__' => '/swagger-ui/dist/']

__SWAGGER__在下面的doc.html里面使用到

视图
view/index/doc.html

<!DOCTYPE html>
<html lang="en">
<head><meta charset="utf-8" /><meta name="viewport" content="width=device-width, initial-scale=1" /><metaname="description"content="SwaggerUI"/><title>SwaggerUI</title><link rel="stylesheet" type="text/css" href="__SWAGGER__/swagger-ui.css" /><link rel="stylesheet" type="text/css" href="__SWAGGER__/index.css" />
</head>
<body>
<div id="swagger-ui"></div>
<script src="__SWAGGER__/swagger-ui-bundle.js" charset="UTF-8"> </script>
<script src="__SWAGGER__/swagger-ui-standalone-preset.js" charset="UTF-8"> </script>
<script src="__SWAGGER__/swagger-initializer.js" charset="UTF-8"> </script>
<script>window.onload = () => {window.ui = SwaggerUIBundle({url: location.origin + '/swagger.json',dom_id: '#swagger-ui',deepLinking: true,presets: [SwaggerUIBundle.presets.apis,SwaggerUIStandalonePreset],plugins: [SwaggerUIBundle.plugins.DownloadUrl],layout: "StandaloneLayout"});};
</script>
</body>
</html>

在这里插入图片描述

相关文章:

tp6 + swagger 配置文档接口

ThinkPHP 6.0 运行环境要求PHP7.2&#xff0c;兼容PHP8.1 安装 composer create-project topthink/think tp 6.0.*如果需要更新框架使用 composer update topthink/framework文档 完全开发手册 swagger 文档 注解文档 安装包 composer require zircote/swagger-php 引用…...

试图一文彻底讲清 “精准测试”

在软件测试中&#xff0c;我们常常碰到两个基本问题&#xff08;困难&#xff09;&#xff1a; 很难保障无漏测&#xff1a;我们做了大量测试&#xff0c;但不清楚测得怎样&#xff0c;对软件上线后会不会出问题&#xff0c;没有信心&#xff1b; 选择待执行的测试用例&#…...

Visual Studio 删除行尾空格

1.CtrlH 打开替换窗口&#xff08;注意选择合适的查找范围&#xff09; VS2010: VS2017、VS2022: 2.复制下面正则表达式到上面的选择窗口(注意前面有一个空格)&#xff1a; VS2010: $ VS2017、VS2022: $ 3.下面的替换窗口不写入 VS2010: VS2017、VS2022: 4.点选“正则表达式…...

LeetCode_BFS_中等_1926.迷宫中离入口最近的出口

目录 1.题目2.思路3.代码实现&#xff08;Java&#xff09; 1.题目 给你一个 m x n 的迷宫矩阵 maze &#xff08;下标从 0 开始&#xff09;&#xff0c;矩阵中有空格子&#xff08;用 ‘.’ 表示&#xff09;和墙&#xff08;用 ‘’ 表示&#xff09;。同时给你迷宫的入口 …...

开源Windows12网页版HTML源码

开源Windows12网页版HTML源码&#xff0c;无需安装就能用的Win12网页版来了Windows12概念版&#xff08;PoweredbyPowerPoint&#xff09;后深受启发&#xff0c;于是通过使用HTML、CSS、js等技术做了这样一个模拟板的Windows12系统&#xff0c;并已发布至github进行开源。 这…...

vscode中使用指定路径下的cmake

在 Visual Studio Code 中指定自定义的 CMake 路径&#xff0c;你可以通过以下步骤来实现&#xff1a; 打开你的 CMake 项目所在的文件夹&#xff0c;在 Visual Studio Code 中。 在项目文件夹中&#xff0c;创建一个名为 .vscode 的文件夹&#xff0c;如果它还不存在。 在 .…...

复杂度分析

文章目录 如何分析、统计算法的执行效率和资源消耗&#xff1f;为什么需要复杂度分析&#xff1f;测试结果非常依赖测试环境测试结果受数据规模的影响很大 大O复杂度表示法时间复杂度分析只关注循环次数最多的一段代码加法法则&#xff1a;总复杂度等于量级最大的那段代码的复杂…...

Linux安装jrockit-jdk1.6.0_29-R28.2.0-4.1.0-linux-x64

下载软件&#xff1a;jrockit-jdk1.6.0_29-R28.2.0-4.1.0-linux-x64.bin 执行安装 ./jrockit-jdk1.6.0_29-R28.2.0-4.1.0-linux-x64.bin 安装提示&#xff0c;一路next&#xff0c;注意第二步修改安装的路径&#xff0c;请修改成&#xff1a; <------------------------ O…...

7.2 怎样定义函数

7.2.1 为什么要定义函数 主要内容&#xff1a; 为什么要定义函数 C语言要求所有在程序中用到的函数必须“先定义&#xff0c;后使用”。这是因为在调用一个函数之前&#xff0c;编译系统需要知道这个函数的名字、返回值类型、功能以及参数的个数与类型。如果没有事先定义&…...

Chrome扩展V2到V3的变化

Chrome扩展manifest V3变化、升级迁移指南_chrome_ZK645945-华为云开发者联盟 (csdn.net) 1.background //V2 "background": "background.js"//V3 "background": {"service_worker": "background.js"} 2.executeScript …...

lock、tryLock、lockInterruptibly有什么区别?

lock、tryLock 和 lockInterruptibly 都是用于线程同步的方法,但它们有不同的行为和用途: lock() 方法:lock() 方法是 Java 中 Lock 接口定义的一部分,它用于获取锁并阻塞当前线程,直到锁可用为止。如果锁当前被其他线程占用,lock() 方法会导致当前线程阻塞,直到锁被释放…...

mysql面试题5:索引、主键、唯一索引、联合索引的区别?什么情况下设置了索引但无法使用?并且举例说明

该文章专注于面试,面试只要回答关键点即可,不需要对框架有非常深入的回答,如果你想应付面试,是足够了,抓住关键点 面试官:说一说索引、主键、唯一索引、联合索引的区别? 索引、主键、唯一索引和联合索引是数据库中常用的索引类型,它们有以下区别: 索引:索引是一种数…...

数据集笔记:纽约花旗共享单车od数据

花旗共享单车公布的其共享单车轨迹数据&#xff0c;包括2013年-2021年曼哈顿、布鲁克林、皇后区和泽西城大约14500辆自行车和950个站点的共享单车轨迹数据 数据地址&#xff1a;Citi Bike System Data | Citi Bike NYC | Citi Bike NYC 性别&#xff08;0未知&#xff1b;1男&…...

为什么 0.1+0.2 不等于 0.3

为什么 0.10.2 不等于 0.3 在 JavaScript 中&#xff0c;0.1 0.2 的结果不等于 0.3&#xff0c;这是因为在 JavaScript 中采用的是双精度浮点数格式&#xff08;64 位&#xff09;&#xff0c;而在这种格式下无法精确表示某些小数&#xff0c;因此在进行计算时会出现精度误差。…...

huggingface_hub v0.17 现已发布

InferenceClient 现在支持所有任务&#xff01;&#x1f4a5;&#xff0c;感谢社区的巨大努力&#xff0c;新添加的任务包括&#xff1a; 对象检测文本分类Token 分类翻译问题回答表格问题回答填充掩码表格分类表格回归文档问题回答视觉问题回答零样本分类 这些方法还支持使用 …...

机器学习——一元线性回归构造直线,并给出损失函数

目 录 Question 问题分析 1.概念补充 2.流程分析 3.注意 具体实现 最终成果 代码 思考&#xff1a; Question 在二维平面有n个点&#xff0c;如何画一条直线&#xff0c;使得所有点到该直线距离之和最短 如果能找到&#xff0c;请给出其损失函数 问题分析 1.概念…...

OpenHarmony自定义组件介绍

一、创建自定义组件 在ArkUI中&#xff0c;UI显示的内容均为组件&#xff0c;由框架直接提供的称为系统组件&#xff0c;由开发者定义的称为自定义组件。在进行 UI 界面开发时&#xff0c;通常不是简单的将系统组件进行组合使用&#xff0c;而是需要考虑代码可复用性、业务逻辑…...

云原生之使用Docker部署PDF多功能工具Stirling-PDF

云原生之使用Docker部署PDF多功能工具Stirling-PDF 一、Stirling-PDF介绍1.1 Stirling-PDF简介1.2 Stirling-PDF功能 二、本次实践规划2.1 本地环境规划2.2 本次实践介绍 三、本地环境检查3.1 检查Docker服务状态3.2 检查Docker版本3.3 检查docker compose 版本 四、下载Stirli…...

B树和B+树的介绍和对比,以及MySQL为何选择B+树

在计算机科学中&#xff0c;B树和B树是常用的数据结构&#xff0c;用于在大规模数据集上进行高效的插入、删除和查找操作。它们在数据库管理系统、文件系统等许多实际应用中发挥着重要作用。本文将深入介绍B树和B树的结构特点、实际应用方面以及它们的优缺点&#xff0c;并最后…...

MD5 绕过第一式:弱比较绕过

文章目录 参考环境MD5韧性脆弱性md5() 隐式类型转换字符串连接数学运算布尔判断相等运算符 科学计数法科学计数法前缀 0E 与 0e PHP8 与 PHP 其他版本下字符串转化为数值的具体规则PHP8数值字符串优化 其他版本更为详细的讲解 字符串与字符串的弱比较字符串与数值的弱比较0e215…...

Windows系统优化终极指南:使用Chris Titus Tech WinUtil一键搞定所有设置

Windows系统优化终极指南&#xff1a;使用Chris Titus Tech WinUtil一键搞定所有设置 【免费下载链接】winutil Chris Titus Techs Windows Utility - Install Programs, Tweaks, Fixes, and Updates 项目地址: https://gitcode.com/GitHub_Trending/wi/winutil 想要让你…...

量子噪声控制与FIR滤波器应用解析

1. 量子噪声控制基础与FIR滤波器原理量子计算的核心挑战之一是如何在噪声环境中保持量子态的相干性。量子比特极易受到环境噪声的影响&#xff0c;导致量子门操作精度下降。在众多噪声类型中&#xff0c;1/f噪声&#xff08;低频噪声&#xff09;因其普遍存在于固态量子系统中而…...

实测Taotoken API调用延迟与稳定性在SpringBoot服务中的表现

&#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 实测Taotoken API调用延迟与稳定性在SpringBoot服务中的表现 在将大模型能力集成到后端微服务时&#xff0c;开发者不仅关注功能的…...

ClickHouse:开源数据引擎在AI浪潮爆发,挑战传统数据库巨头

ClickHouse&#xff1a;开源数据引擎爆发&#xff0c;在AI浪潮中挑战传统数据库巨头过去18个月&#xff0c;开源数据基础设施里最热的公司除了Supabase可能就是ClickHouse了。ClickHouse Cloud ARR在2025年保持250%的同比增速&#xff0c;第三方估计从2024年中的约1500万美元增…...

从协同过滤到深度学习:Spark机器学习实战三部曲

1. 协同过滤&#xff1a;Spark推荐系统的基石 推荐系统是机器学习最接地气的应用场景之一。我在电商平台做算法优化时&#xff0c;发现协同过滤(CF)始终是新手最容易上手的推荐算法。Spark MLlib提供了两种经典实现&#xff1a;基于物品的协同过滤(Item CF)和基于用户的协同过滤…...

改进灰狼算法天线优化设计【附代码】

✨ 长期致力于灰狼优化算法、直线阵列天线、平面阵列天线、微带天线研究工作&#xff0c;擅长数据搜集与处理、建模仿真、程序编写、仿真设计。 ✅ 专业定制毕设、代码 ✅ 如需沟通交流&#xff0c;点击《获取方式》 &#xff08;1&#xff09;Logistic-Tent双重混沌初始化与非…...

2026年IEEE TASE,基于不平衡与平衡竞争策略辅助的双种群优化算法+约束多目标优化,深度解析+性能实测

目录1.摘要2.CMOPs3.提出方法4.结果展示5.参考文献6.代码获取7.算法辅导应用定制读者交流1.摘要 针对具有复杂碎片化可行域约束多目标优化难题&#xff0c;本文提出一种基于不平衡与平衡竞争策略辅助的双种群算法&#xff08;UBCSO&#xff09;&#xff0c;通过平衡种群的均匀…...

简单学习 --> WebSocket

websocketwebsocket 是应用层 协议, 基于传输层Tcp 协议 的协议 ;这个协议可以实现服务器主动给客户端推送信息功能(本身Tcp就可以做到,但是HTTP不行)websocket报文格式websocket 和服务器建立连接的过程首先 客户端 发送 HTTP请求 给服务器 , 请求里 包含了一些特殊header , (…...

PowerToys深度解析:Windows生产力工具集的高级配置与性能调优

PowerToys深度解析&#xff1a;Windows生产力工具集的高级配置与性能调优 【免费下载链接】PowerToys Microsoft PowerToys is a collection of utilities that supercharge productivity and customization on Windows 项目地址: https://gitcode.com/GitHub_Trending/po/Po…...

Box64终极指南:5分钟学会在ARM设备上运行x86_64程序

Box64终极指南&#xff1a;5分钟学会在ARM设备上运行x86_64程序 【免费下载链接】box64 Box64 - Linux Userspace x86_64 Emulator with a twist, targeted at ARM64, RV64 and LoongArch Linux devices 项目地址: https://gitcode.com/gh_mirrors/bo/box64 你是否曾经梦…...