寫一個ThinkPHP SwaggerV3 擴充套件包

liaosp發表於2021-09-16

在這裡插入圖片描述

大致過程和我之前寫的Laravel 擴充套件差不多 Laravel 寫一箇中文驗證擴充套件包
只有一些小小的區別這邊寫個教程。希望為thinkphp 開發者做一點點貢獻。
主要講一些開發的過程和一些❤感悟吧,對Tp不是特別熟,歡迎大家指正(づ ̄3 ̄)づ╭❤~

原始碼:github.com/liaoshengping/think-swa...

安裝:

composer require liaosp/think-swagger -vvv

?

我在tp的根目錄下建立pkg

mkdir pkg
cd pkg
package-builder build think-swagger

新增 zircote/swagger-php,在composer.json 新增

    "require": {
        "zircote/swagger-php": "^3.2"
    },

根據 官網的示例,我們希望在TP觸發如下程式碼

<?php
require("vendor/autoload.php");
$openapi = \OpenApi\Generator::scan(['/path/to/project']);
header('Content-Type: application/x-yaml');
echo $openapi->toYaml();

需要在tp的compsoer 加入 “minimum-stability”: “dev”

 "minimum-stability": "dev"

repositories 加入

        {
            "type": "path",
            "url": "pkg\\think-swagger"
        }

在src 建立 一個Controller.php

一個是展示 html 的,一個是提供swagger api 介面的

具體程式碼可查閱:

github.com/liaoshengping/think-swa...

    "autoload": {
        "psr-4": {
            "Liaosp\\ThinkSwagger\\": "src"
        },
        "files": [
            "src/route.php"
        ]
    },

新增router.php

tp5 我現在的版本可以這樣做,但是TP6我試了下,不行啊報錯;如果後面有Tp6專案了,我會把tp6部分整合一下歡迎大家收藏。

Route::any('apidoc', '\\Liaosp\\ThinkSwagger\\Controller@apidoc');
Route::any('apidocJson', '\\Liaosp\\ThinkSwagger\\Controller@apidocJson');

swagger ui 是 開源的 js庫 github.com/swagger-api/swagger-ui

靜態形式引用 dist/index.html

Swagger 主要需要這三個檔案

            '/swagger/swagger-ui.css',
            '/swagger/swagger-ui-bundle.js',
            '/swagger/swagger-ui-standalone-preset.js'

tp5沒有publish ,所以我想了一個辦法,通過查詢是否存在資源,進行資源的釋出。感興趣的可以看下上面提供的原始碼

可能我的思維Laravel化了,在開發之前我認為一些 本應該有的擴充套件功能都應該有的,但是我查閱了好幾個作者的think-swagger擴充套件包,不太靈活了。以至於有一些開發擴充套件包的同學,需要手動改原始碼,或者乾脆就沒有composer 包,直接寫教程如何去實現。

接著我查閱了下Tp6的原始碼,在開發擴充套件方面有一定的增強,比如下面的是我學Tp6 的官方的外掛:

Laravel 的包的提供者的命名官方的是在包名加 Provider

我查閱了下tp的擴充套件包,習慣於用Service 作為包的提供者


    "extra": {
        "think": {
            "services": [
                "Liaosp\\ThinkSwagger\\Service"
            ]
        }
    }

不過Laravel 之前也需要手動新增Provider,希望國產Tp越來越好,目前我測試了下這個包可以在Tp5執行,tp6不行。後面再看看有沒有接觸TP6專案再把這個包升級一下吧。

原始碼:github.com/liaoshengping/think-swa...

本作品採用《CC 協議》,轉載必須註明作者和本文連結

相關文章