Swagger3/thinkphp6教程
Swagger-PHP v3.x/thinkphp6教程
网上搜了很多关于swagger-PHP的教程,要么就是写的很乱,我完全看不懂,要么就是版本太旧,所以决定自己摸索一遍,顺便写一篇教程,日后好记!!!
准备工作
(要有一点PHP基础,起码要能搭建PHP环境,让PHP程序跑起来):
- 安装Composer,windows下载,如果遇到任何问题或者想更深入地学习 Composer,请参考Composer 文档(英文文档,中文文档)
- 安装thinkphp6,确保能正常运行(不懂得可看 ThinkPHP6.0完全开发手册)
安装zircote/swagger-php依赖
composer require zircote/swagger-php
运行完成如下,在vendor目录下出现zircote文件夹:
编写swagger
自学能力强的可以自己看文档Swagger-PHP v3.x,这里我就直接略过文档了
在route文件夹下app.php:
<?php
use think\facade\Route;Route::get('think', function () {return 'hello,ThinkPHP6!';
});Route::get('hello/:name', 'index/hello');//下面是新加的
Route::get('/swagger', function() {$openapi = OpenApi\scan(root_path().'app');//$openapi = OpenApi\scan('../app');//当然,你也可以用这种相对路径的写法,但是我建议还是用上面,避免更换route路径后出现问题header('Content-Type: application/json');echo $openapi->toJson();
});
然后再app文件夹下controller\Index.php:
<?php
namespace app\controller;use app\BaseController;/*** @OA\Info(title="thinkphp6接口文档", version="1.0.1")*/class Index extends BaseController
{/*** @OA\Get(path="/api/article",* tags={"文章管理"},* summary="文章列表",* @OA\Parameter(name="token", in="header", description="token", @OA\Schema(type="string", default="123456")),* @OA\Parameter(name="page", in="query", description="页码", @OA\Schema(type="int", default="1")),* @OA\Parameter(name="limit", in="query", description="行数", @OA\Schema(type="int", default="10")),* @OA\Response(response="200", description="The User")* )*/public function index(){return '<style type="text/css">*{ padding: 0; margin: 0; } div{ padding: 4px 48px;} a{color:#2E5CD5;cursor: pointer;text-decoration: none} a:hover{text-decoration:underline; } body{ background: #fff; font-family: "Century Gothic","Microsoft yahei"; color: #333;font-size:18px;} h1{ font-size: 100px; font-weight: normal; margin-bottom: 12px; } p{ line-height: 1.6em; font-size: 42px }</style><div style="padding: 24px 48px;"> <h1>:) </h1><p> ThinkPHP V' . \think\facade\App::version() . '<br/><span style="font-size:30px;">14载初心不改 - 你值得信赖的PHP框架</span></p><span style="font-size:25px;">[ V6.0 版本由 <a href="https://www.yisu.com/" target="yisu">亿速云</a> 独家赞助发布 ]</span></div><script type="text/javascript" src="https://tajs.qq.com/stats?sId=64890268" charset="UTF-8"></script><script type="text/javascript" src="https://e.topthink.com/Public/static/client.js"></script><think id="ee9b1aa918103c4fc"></think>';}/*** @OA\Post(path="/api/article",* tags={"文章管理"},* summary="新增文章",* @OA\Parameter(name="token", in="header", description="token", @OA\Schema(type="string")),* @OA\RequestBody(* @OA\MediaType(* mediaType="multipart/form-data",* @OA\Schema(* @OA\Property(description="文章名称", property="title", type="string", default="dd"),* @OA\Property(description="文章内容", property="content", type="string"),* required={"title", "content"})* )* ),* @OA\Response(response="200", description="successful operation")* )*/public function save(){//save业务代码}/*** @OA\Get(path="/api/article/{id}",* tags={"文章管理"},* summary="文章详情",* @OA\Parameter(name="token", in="header", description="token", @OA\Schema(type="string")),* @OA\Parameter(name="id", in="path", description="文章id", @OA\Schema(type="int")),* @OA\Response(response="200", description="The User")* )*/public function read($id){//read业务代码}/*** @OA\Put(path="/api/article/{id}",* tags={"文章管理"},* summary="编辑文章",* @OA\Parameter(name="token", in="header", description="token", @OA\Schema(type="string")),* @OA\Parameter(name="id", in="path", description="文章id", @OA\Schema(type="int")),* @OA\RequestBody(* @OA\MediaType(* mediaType="content-type/json",* @OA\Schema(* @OA\Property(description="文章名称", property="title", type="string"),* @OA\Property(description="文章内容", property="content", type="string"),* required={"title", "content"})* )* ),* @OA\Response(response="200", description="successful operation")* )*/public function update($id){//update业务代码}/*** @OA\Delete(path="/api/article/{id}",* tags={"文章管理"},* summary="删除文章",* @OA\Parameter(name="token", in="header", description="token", @OA\Schema(type="string")),* @OA\Parameter(name="id", in="path", description="文章id", @OA\Schema(type="int")),* @OA\Response(response="200", description="The User")* )*/public function delete($id){//delete业务代码}
}
接下来是查看效果:
根目录下执行:
php think run
在浏览器输入 http://127.0.0.1:8000/swagger,出现如下json格式的字符串,就算成功了
使用Swagger UI自动生成接口文档
下载前端代码:https://github.com/swagger-api/swagger-ui
下载好之后找到dist目录下的inedx.html文件,如下图
双击打开index.html文件,浏览器如下显示,在这个页面你就可以调试接口了:
其他
导出静态openapi.json文件(在根目录下可以找到openapi.json文件):
./vendor/bin/openapi --output openapi.json ./app
具体用法请 查看链接
效果:
Swagger3/thinkphp6教程相关推荐
- thinkphp6教程笔记
框架核心分析 讲的很好 https://www.kancloud.cn/hubqin/thinkphp/1361597 指南 如果看不懂的 可以看下之前的文档 比如tp5.1 5.0 有的东西没搬过来 ...
- thinkphp6学习教程与源码 tp6开源CMS系统源码研究
thinkphp6最新正式版框架上市已经有一段时间了,从官方的介绍来看,tp6的框架和tp5有很大的区别,完全重新改写了底层架构代码和逻辑,所以不支持thinkphp5的无缝升级,也就是说如果你之前的 ...
- crm开源系统 tp框架_thinkphp6学习教程与源码 tp6开源CMS系统源码研究
thinkphp6最新正式版框架上市已经有一段时间了,从官方的介绍来看,tp6的框架和tp5有很大的区别,完全重新改写了底层架构代码和逻辑,所以不支持thinkphp5的无缝升级,也就是说如果你之前的 ...
- thinkphp仿素材火教程_thinkphp6学习教程与源码 tp6开源CMS系统源码研究
thinkphp6最新正式版框架上市已经有一段时间了,从官方的介绍来看,tp6的框架和tp5有很大的区别,完全重新改写了底层架构代码和逻辑,所以不支持thinkphp5的无缝升级,也就是说如果你之前的 ...
- php实现中间件6,说一说ThinkPHP6中五花八门的中间件_PHP开发框架教程
thinkphp配置配置多应用多配置的方法_PHP开发框架教程 一般的thinkphp框架一般都是单模块开发的,但有时候我们可能需要进行多模块开发,本文就来为大家介绍一下thinkphp配置多模块.多 ...
- thinkphp6+swoole websocket使用教程自研路线不建议使用
转载请注明: 藏羚骸的博客~thinkphp6+swoole websocket使用教程自研路线不建议使用. 介绍 对于think-swoole网上资料五花八门,根据网上资料,我成功走上了岔路口,但是 ...
- SpringBoot实战教程(1)| 整合Swagger3.0.0
本文教你如何在SpringBoot中整合Swagger,快速实现在线接口文档. Swagger版本:3.0.0 SpringBoot版本:2.5.6 目录 一.初始化SpringBoot项目 二.引入 ...
- php6 配置,thinkphp6下载安装与配置图文详细讲解教程(composer下载安装)
thinkphp6发布也有一段时间了,相对来说比较稳定,是时候学习一下thinkphp6框架,提前学习,到正式发布的时候,可以直接拿来做正式的项目,先人一步.thinkPHP6.0在5.1的基础上对底 ...
- ThinkPHP6+swoole+easywechat使用教程
前言 在结合think-swoole+easywechat扩展使用的时候,需要考虑curl兼容swoole携程问题,request兼容swoole框架,因为easywechat底层还是通过$_POST ...
- ThinkPhp6框架基本使用实践教程
项目介绍 一款 PHP 语言基于 ThinkPhp6.x.Layui.MySQL等框架精心打造的一款模块化.插件化.高性能的前后端分离架构敏捷开发框架,可用于快速搭建前后端分离后台管理系统,本着简化开 ...
最新文章
- Kubernetes学习笔记二:Namespace,Cgroups 的隔离与应用
- Winform中通过代码设置DevExpress的TextEdit的类型为Numbernic
- boost::gregorian模块实现计算今年的元旦直到下一个元旦的日子的测试程序
- odbc连接oracle失败,大神解答win7系统ODBC无法连接ORACLE的处理方案
- Linux命令之文件相关
- elementUI的DatePicker+DateTimePicker组件的自定义日期禁用
- opencv ORB角检测
- 【个人笔记】OpenCV4 C++ 快速入门 26课
- 查询一个表中一个字段相同的数据_最实用MySQL 查询当天、本周,本月、上一个月的数据...
- arduino连接ps2手柄控制智能小车实践记录
- QTcpSocket的使用步骤
- 如何快速插入大量/批量随机数据到数据库(oracle/sqlserver/mysql/postgresql)
- 清差额征税和简易计税的适用情形
- 消灭星星android,消灭星星安卓版
- Java NIO与IO比较总结
- Nomad集群 自身高可用测试
- Python判断闰年函数
- python绘制球体_OpenGL三维球体数据生成与绘制【附源码】
- miui系统小米手机应用双开默认登陆设置修改方法步骤
- 为什么90%的程序员学编程都会从C语言开始?