1、首先安装composer和git
2、在宝塔中新建个域名:www.tpsw.com
3、安装tp5.0
composer create-project topthink/think=5.0.* tp5 --prefer-dist
4、将tp5的文件放在根目录
6、打开tp下的composer.json修改:
"require":{ "PHP": ">=5.4.0", "topthink/framework":"^5.0" }, //在require后增加zircote/swagger-php "require":{ "PHP": ">=5.4.0", "topthink/framework":"^5.0", "zircote/swagger-php" :"*" },
之后在根目录运行
composer update
等待安装完成后或者直接在打开命令窗口之后运行
composer require zircote/swagger-php
提示安装完成后执行
composer global require zircote/swagger-php
在vendor中会生成一个zircote组件文件夹,说明插件安装成功了
7、在public根目录新建一个swaggerApi文件夹存储生成的swagger.json
8、执行命令:
php /www/wwwroot/tp/vendor/zircote/swagger-php/bin/swagger /www/wwwroot/tp/vendor/zircote/swagger-php/Examples -o /www/wwwroot/tp/public/swaggerApi/swagger.json
第一个路径是你安装成功后组件的路径;第二个路径是你想要生成这个目录下所有swagger方式注释的PHP文件,把所有注释生成api文档,第三个路径是存放生成swagger.json的路径。
可以写个控制器,每次访问时重新生成json文件并且打开swagger
<?php namespace app\index\controller; use think\Controller; class Index extends Controller { public function index(){ $path = '../application'; //你想要哪个文件夹下面的注释生成对应的API文档 $swagger = \Swagger\scan($path); // header('Content-Type: application/json'); // echo $swagger; $swagger_json_path = '../public/swaggerApi/swagger.json'; $res = file_put_contents($swagger_json_path, $swagger); if ($res == true) { $this->redirect('http://www.tpswagger.com/swagger-ui/dist/index.html'); } } } >
第二安装swagger
在public文件夹下安装swagger,
git clone https://github.com/swagger-api/swagger-ui.git
安装完成后打开dist目录,打开index.html文件
<script> window.onload = function() { // Begin Swagger UI call region const ui = SwaggerUIBundle({ url: "http://www.tpswagger.com/swaggerApi/swagger.json",//更改此url为你tp5内生成的json文件 dom_id: '#swagger-ui', deepLinking: true, presets: [ SwaggerUIBundle.presets.apis, SwaggerUIStandalonePreset ], plugins: [ SwaggerUIBundle.plugins.DownloadUrl ], layout: "StandaloneLayout" }) // End Swagger UI call region window.ui = ui } </script>
//PHP中注释的写法
<?php /** * @see https://github.com/zircote/swagger-php/tree/2.x/Examples/ * @SWG\Swagger( * basePath="/v1/", * host="api.example.com", * schemes={"http"}, * produces={"application/json"}, * consumes={"application/json"}, * @SWG\Info( * version="1.0.0", * title="EXAMPLE WEB API", * description="接口地址:http://api.example.com/", * termsOfService="", * @SWG\Contact(name="PHP Team"), * @SWG\License(name="") * ), * @SWG\Definition( * definition="Error", * type="object", * required={"code", "msg"}, * @SWG\Property( property="code", type="integer", description="响应状态", example="0"), * @SWG\Property( property="message", type="string", description="响应消息", example="操作失败"), * ), * @SWG\Definition( * definition="Success", * type="object", * required={"code", "msg"}, * @SWG\Property( property="code", type="integer", description="响应状态", example="1"), * @SWG\Property( property="message", type="string * ", description="响应消息", example="操作成功"), * ), * ) */ class ApiController { }
注释的相对比较详细的文档:https://learnku.com/laravel/t/7430/how-to-write-api-documents-based-on-swagger-php#747b67