tp5和swagger

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 appindexcontroller;
use thinkController;
class Index extends Controller
{
    public function index(){
        $path = '../application'; //你想要哪个文件夹下面的注释生成对应的API文档
        $swagger = Swaggerscan($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/
 * @SWGSwagger(
 *     basePath="/v1/",
 *     host="api.example.com",
 *     schemes={"http"},
 *     produces={"application/json"},
 *     consumes={"application/json"},
 *     @SWGInfo(
 *         version="1.0.0",
 *         title="EXAMPLE WEB API",
 *         description="接口地址:http://api.example.com/",
 *         termsOfService="",
 *         @SWGContact(name="PHP Team"),
 *         @SWGLicense(name="")
 *     ),
 *     @SWGDefinition(
 *         definition="Error",
 *         type="object",
 *         required={"code", "msg"},
 *         @SWGProperty( property="code", type="integer", description="响应状态", example="0"),
 *         @SWGProperty( property="message", type="string", description="响应消息", example="操作失败"),
 *     ),
 *     @SWGDefinition(
 *         definition="Success",
 *         type="object",
 *         required={"code", "msg"},
 *         @SWGProperty( property="code", type="integer", description="响应状态", example="1"),
 *         @SWGProperty( property="message", type="string
 * ", description="响应消息", example="操作成功"),
 *     ),
 * )
 */
class ApiController
{
    
}

 注释的相对比较详细的文档:https://learnku.com/laravel/t/7430/how-to-write-api-documents-based-on-swagger-php#747b67

原文地址:https://www.cnblogs.com/ziyandeyanhuo/p/11224962.html