大致過程和我之前寫的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 協議》,轉載必須註明作者和本文連結