PHP项目安装Swagger

基本介绍

Swagger 和 Swagger-ui 是完全分离的两个项目:


1.0> Swagger用于扫描Controller,并生成 json 格式的扫描结果(即swagger.json文件);

官网:https://zircote.github.io/swagger-php/

GitHub:https://github.com/zircote/swagger-php


2.0> Swagger-ui用于可视化的显示swagger.json文件;

官网:https://swagger.io/tools/swagger-ui/

Github:https://github.com/swagger-api/swagger-ui


下载配置Swagger-ui

1.0> 从 GitHub 下载 swagger-ui 的 dist:


2.0> 在项目 public 目录下新建 swagger-ui目录,将 dist 中的文件放入其中:


3.0> 现在,通过 /swagger-ui/index.html 即可访问到 swagger-ui 的页面;swagger-ui 默认加载的 swagger.jsonhttps://petstore.swagger.io/v2/swagger.json ,如下:


4.0> 将swagger-ui默认加载的 swagger.json 修改成你自己项目生成的 swagger.json地址,如下:


5.0> Swagger-ui的UI界面比较丑,你可以编辑 /dist/index.html,以调整其样式:


安装配置Swagger

1.0> 安装Swagger

composer require zircote/swagger-php

2.0> 生成 swagger.json文件

如下,当请求 /doc 时,扫描所有 Controller ,并将扫描结果写入到 public/swagger.json 文件中,然后打开 swagger-ui 页面;

注:每次请求 /doc 时会重新扫描 Controller;如果直接打开 swagger-ui 页面,则只会从public目录下读取已生成的swaager.json文件;

<?php
namespace app\controller;

use OpenApi\Generator;
use app\BaseController;

class App extends BaseController {

    public function doc(){
        // 扫描 Controller 文件夹
        $openapi = Generator::scan(['../app/controller']);
        header('Content-Type: application/x-yaml');

        // 获取扫描结果
        $result = $openapi->toYaml();

        // 将扫描结果写入到 public/swagger-ui/swagger.json 文件中
        $jsonString = $_SERVER['DOCUMENT_ROOT'].'/swagger-ui/swagger.json';
        $res = file_put_contents($jsonString,$result);

        // 打开 swagger-ui 页面
        if ($res == true) {
            return redirect('https://service.admin.sidoc.vip/swagger-ui/index.html');
        }
    }
}
举报

© 著作权归作者所有


1