Swagger-PHP v3.x/thinkphp6教程

网上搜了很多关于swagger-PHP的教程,要么就是写的很乱,我完全看不懂,要么就是版本太旧,所以决定自己摸索一遍,顺便写一篇教程,日后好记!!!

准备工作

(要有一点PHP基础,起码要能搭建PHP环境,让PHP程序跑起来):

  1. 安装Composer,windows下载,如果遇到任何问题或者想更深入地学习 Composer,请参考Composer 文档(英文文档,中文文档)
  2. 安装thinkphp6,确保能正常运行(不懂得可看 ThinkPHP6.0完全开发手册)

安装zircote/swagger-php依赖

在thinkphp6项目根目录下运行命令:

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教程相关推荐

  1. thinkphp6教程笔记

    框架核心分析 讲的很好 https://www.kancloud.cn/hubqin/thinkphp/1361597 指南 如果看不懂的 可以看下之前的文档 比如tp5.1 5.0 有的东西没搬过来 ...

  2. thinkphp6学习教程与源码 tp6开源CMS系统源码研究

    thinkphp6最新正式版框架上市已经有一段时间了,从官方的介绍来看,tp6的框架和tp5有很大的区别,完全重新改写了底层架构代码和逻辑,所以不支持thinkphp5的无缝升级,也就是说如果你之前的 ...

  3. crm开源系统 tp框架_thinkphp6学习教程与源码 tp6开源CMS系统源码研究

    thinkphp6最新正式版框架上市已经有一段时间了,从官方的介绍来看,tp6的框架和tp5有很大的区别,完全重新改写了底层架构代码和逻辑,所以不支持thinkphp5的无缝升级,也就是说如果你之前的 ...

  4. thinkphp仿素材火教程_thinkphp6学习教程与源码 tp6开源CMS系统源码研究

    thinkphp6最新正式版框架上市已经有一段时间了,从官方的介绍来看,tp6的框架和tp5有很大的区别,完全重新改写了底层架构代码和逻辑,所以不支持thinkphp5的无缝升级,也就是说如果你之前的 ...

  5. php实现中间件6,说一说ThinkPHP6中五花八门的中间件_PHP开发框架教程

    thinkphp配置配置多应用多配置的方法_PHP开发框架教程 一般的thinkphp框架一般都是单模块开发的,但有时候我们可能需要进行多模块开发,本文就来为大家介绍一下thinkphp配置多模块.多 ...

  6. thinkphp6+swoole websocket使用教程自研路线不建议使用

    转载请注明: 藏羚骸的博客~thinkphp6+swoole websocket使用教程自研路线不建议使用. 介绍 对于think-swoole网上资料五花八门,根据网上资料,我成功走上了岔路口,但是 ...

  7. SpringBoot实战教程(1)| 整合Swagger3.0.0

    本文教你如何在SpringBoot中整合Swagger,快速实现在线接口文档. Swagger版本:3.0.0 SpringBoot版本:2.5.6 目录 一.初始化SpringBoot项目 二.引入 ...

  8. php6 配置,thinkphp6下载安装与配置图文详细讲解教程(composer下载安装)

    thinkphp6发布也有一段时间了,相对来说比较稳定,是时候学习一下thinkphp6框架,提前学习,到正式发布的时候,可以直接拿来做正式的项目,先人一步.thinkPHP6.0在5.1的基础上对底 ...

  9. ThinkPHP6+swoole+easywechat使用教程

    前言 在结合think-swoole+easywechat扩展使用的时候,需要考虑curl兼容swoole携程问题,request兼容swoole框架,因为easywechat底层还是通过$_POST ...

  10. ThinkPhp6框架基本使用实践教程

    项目介绍 一款 PHP 语言基于 ThinkPhp6.x.Layui.MySQL等框架精心打造的一款模块化.插件化.高性能的前后端分离架构敏捷开发框架,可用于快速搭建前后端分离后台管理系统,本着简化开 ...

最新文章

  1. Kubernetes学习笔记二:Namespace,Cgroups 的隔离与应用
  2. Winform中通过代码设置DevExpress的TextEdit的类型为Numbernic
  3. boost::gregorian模块实现计算今年的元旦直到下一个元旦的日子的测试程序
  4. odbc连接oracle失败,大神解答win7系统ODBC无法连接ORACLE的处理方案
  5. Linux命令之文件相关
  6. elementUI的DatePicker+DateTimePicker组件的自定义日期禁用
  7. opencv ORB角检测
  8. 【个人笔记】OpenCV4 C++ 快速入门 26课
  9. 查询一个表中一个字段相同的数据_最实用MySQL 查询当天、本周,本月、上一个月的数据...
  10. arduino连接ps2手柄控制智能小车实践记录
  11. QTcpSocket的使用步骤
  12. 如何快速插入大量/批量随机数据到数据库(oracle/sqlserver/mysql/postgresql)
  13. 清差额征税和简易计税的适用情形
  14. 消灭星星android,消灭星星安卓版
  15. Java NIO与IO比较总结
  16. Nomad集群 自身高可用测试
  17. Python判断闰年函数
  18. python绘制球体_OpenGL三维球体数据生成与绘制【附源码】
  19. miui系统小米手机应用双开默认登陆设置修改方法步骤
  20. 为什么90%的程序员学编程都会从C语言开始?

热门文章

  1. Linux修改只读文件权限
  2. ERROR: sdl2 requested but not found
  3. 塔夫斯大学计算机教授,史上第一次生物创造,全球首个活体机器人诞生!
  4. linux bt 命令行,在Linux终端下进行BT下载
  5. 我的未来作文计算机行业,我的未来职业畅想作文
  6. 10041---用mycat做读写分离:基于 MySQL主从复制
  7. NLP 模型压缩方法综述
  8. pr关键帧动画、字幕、音频
  9. java输出pdf(pdfptable和pdftcell)
  10. MVC实现局部视图刷新