環境:Centos7.1php
參考了網上的一些教程,過程有點曲折。參考教程地址:https://www.cnblogs.com/lyh940/p/7020576.htmlhtml
開始操做:git
一、用composer安裝Swagger。github
機器上裝的有寶塔面板,爲了省事兒,直接用面板的shell執行安裝Swagger的命令,shell
curl -sS https://getcomposer.org/installer | php mv composer.phar /usr/local/bin/composer
我這邊執行以後,結果出現如下提示:json
All settings correct for using Composer
The HOME or COMPOSER_HOME environment variable must be set for composer to run correctly
正常狀況下,應當提示:後端
All settings correct for using Composer
download……
看到跟環境變量有關,就檢查了環境變量,發現查看環境變量的結果不正確。而後想到,也許不能使用寶塔面板的shell。因而登陸服務器,發現提示結果正常了。api
composer安裝以後,發現全局命令沒法使用。服務器
composer updateapp
composer require zircote/swagger-php
composer global require zircote/swagger-php
每次執行composer命令,都會提示命令參數。意思是我輸入的命令不對。
可是我明明進行了全局安裝。也就是執行了前面的mv命令。進入到usr/local/bin/目錄,發現文件也是在的。這就奇怪了。
使用composer -v命令,查看軟件的版本。發現是v0.2.x,版本好像不太對,查看了一下composer網站上的版本,發現當前官網上寫的是Latest: v1.8.0
難道有個軟件使用的命令跟composer重名?
上面提示執行這個命令,提示命令參數,因而我就用它提示的參數composer --help,查看幫助。發現給出的幫助裏面,有個網址,訪問那個網址,發現是區塊鏈帳本項目介紹。原來是同事在這個服務器測試區塊鏈項目,裝的東西,衝突了。
想到可否給命令設置別名,因而將/usr/local/bin/composer更名爲composer1。執行
composer1 install
提示權限被拒絕。難道是沒有權限?可是我明明使用的root帳號。仍是去查看了composer1文件的權限,發現root有讀寫權限,但沒有執行權限,因而添加上執行權限,執行
composer1 install
執行成功。
二、下載swagger-ui
用cd命令進入到存放靜態文件的目錄,例如public目錄。執行下面命令:
git clone https://github.com/swagger-api/swagger-ui.git
注意:上面的命令,下載的是當前最新版本3.0,可是3.0有個已知的問題,不支持中文。若是想支持中文,須要指定版本。
git clone --branch v2.2.10 https://github.com/swagger-api/swagger-ui.git
三、安裝swagger-php後端
進入tp框架找到根目錄下,打開composer.json找到require項,添加一行,而後使用更新命令。
"zircote/swagger-php": "*"
注意,每行用逗號分隔,不要忘了。
或者執行命令:
composer require "zircote/swagger-php"
注意:這個命令默認下載的是當前最新的版本,也就是3.x。我到git上查了一下,想要跟swagger-ui的2.x版本配合使用,須要使用swagger-php 2.x版本。指定版本:
composer require "zircote/swagger-php:2.0.13"
四、生成swagger.json文件
教程上,讓執行下面命令(實際執行的命令,要根據你那邊的目錄來肯定)
php E:/WampServer/WWW/tpSwagger/tp5/vendor/zircote/swagger-php/bin/swagger E:/WampServer/WWW/tpSwagger/tp5/vendor/zircote/swagger-php/Examples -o E:/WampServer/WWW/tpSwagger/tp5/swaggerApi/swagger.json
第1個路徑是你安裝成功後組件的路徑;
第2個路徑是你想要生成這個目錄下全部用swagger方式註釋的php文件,把全部註釋生成api文檔;
第3個路徑是你存放生成swagger.json的路徑。
多是我這邊默認安裝的是新版的swagger(查看版本是3.0),提示找不到swagger
我到bin這個目錄,發現沒有swagger文件,可是有一個openapi文件。
因而就把bin/swagger改成bin/openapi,再次執行。
結果雖然報了不少警告,可是確實生成了json文件。
五、swagger-ui加載生成的json文件
進入到swagger-ui的下載目錄,找到dist目錄,打開裏面的index.html文件,修改文件引用的.json文件的路徑爲你的json文件的路徑(就是上面生成的那個swagger.json)
若是json文件的目錄設置不對,則會提示Failed to load API definition.
六、快速更新文檔
<?php namespace app\index\controller; use think\Controller; class Index extends Controller { public function index(){ $path = 'D:/WampServer/WWW/tpSwagger/tp5/application'; //你想要哪一個文件夾下面的註釋生成對應的API文檔 $swagger = \OpenApi\scan($path); // header('Content-Type: application/json'); // echo $swagger; $swagger_json_path = 'D:/WampServer/WWW/tpSwagger/tp5/swaggerApi/swagger.json'; $res = file_put_contents($swagger_json_path, $swagger); if ($res == true) { $this->redirect('http://localhost/tpSwagger/swagger-ui/dist/index.html'); } } }
我這邊在使用Swagger方法的時候,不能用這個\OpenApi\scan($path);提示找不到方法,須要用\Swagger\scan($path);
掃描的結果是對象,若是要寫入文件,須要轉換爲字符串。另外在寫入文件的時候,遇到權限問題。我最後沒有使用file_put_contents函數
$path = APP_PATH.'portal/test'; //你想要哪一個文件夾下面的註釋生成對應的API文檔 $swagger = \Swagger\scan($path); // header('Content-Type: application/json'); // echo $swagger; $swagger_json_path = ROOT_PATH.'public/swaggerApi/swagger.json'; // 檢測模板目錄 $dir = dirname($swagger_json_path); if (!is_dir($dir)) { mkdir($dir, 0755, true); } $myfile = fopen($swagger_json_path, "w") or die("Unable to open file!"); $swagger=json_encode($swagger, true); fwrite($myfile, $swagger); fclose($myfile);