# [CI+swagger]使用筆記
:::success
使用版本
CI:3.1.6
Swagger:zircote/swagger-php 3.2
:::
步驟說明
1.下載Codeingiter
https://codeigniter.org.tw/
本次使用3.1.6版
2.在根目錄建立資料夾swagger
![](https://i.imgur.com/lFGcZCW.png)
3.下載swagger的樣式
[Shttps://github.com/swagger-api/swagger-ui](https://github.com/swagger-api/swagger-ui)
解壓縮後,將dist內檔案移到剛剛建立的swagger裏
![](https://i.imgur.com/qyGqCR4.jpg)
4.在根目錄安裝swagger
```
composer require zircote/swagger-php
```
成功後根目錄出現vender資料夾/zircote/swagger-php
5.controllers中建立Swagger.php
```php=
<?php
defined('BASEPATH') or exit('No direct script access allowed');
require('./vendor/autoload.php');
class Swagger extends CI_Controller
{
public function __construct()
{
parent::__construct();
}
public function index()
{
$openapi = OpenApi\scan(__DIR__);
// echo $openapi->toJson();
$jasonFile = './api_doc.json';
file_put_contents($jasonFile, $openapi->toJson());
// echo $jasonFile;
// $this->load->view('swagger', '');
}
}
```
用來建立api_doc.json
scan為掃描特定位置中含有swagger語法檔案
__DIR__:本檔案所在的路徑controllers
因此掃描位置為controllers以下所有檔案
6.在controllers建立Api.php
寫入一些swagger語法
```php=
<?php
defined('BASEPATH') or exit('No direct script access allowed');
class Api extends CI_Controller
{
/**
* @OA\Server(url="http://localhost/ktv")
* @OA\Info(
* version="1.0.0",
* title="ktv Api文件",
* description="ktv Api 文件",
* )
*
*/
public function __construct()
{
parent::__construct();
}
/**
* @OA\Get(
* path="/api/version",
* tags={"version"},
* summary="版本資訊",
* description="返回版本資訊",
* @OA\Response(
* response=200,
* description="版本資訊",
* @OA\Schema(
* type="array",
* ),
* ),
* )
*/
public function post()
{
echo 'test';
}
}
```
swagger語法詳細參考:https://learnku.com/laravel/t/7430/how-to-write-api-documents-based-on-swagger-php
7.建立api的json檔案
前往`http://localhost/ProjectName/swagger/index`
若出現以下錯誤
![](https://i.imgur.com/Zz1PxG4.png)
需更改專案權限
```
sudo chmod 777 ProjectName
```
在根目錄可看到api_doc的json檔及建立成功
8.前往swagger/index.html修改內容
```javascript=
<script>
window.onload = function() {
// Begin Swagger UI call region
const ui = SwaggerUIBundle({
url: "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>
```
將json位置改為api_doc.json的位置
9.開啟:`http://localhost/ktv/swagger/`
![](\)
成功!
ref:
https://hackmd.io/6Ub_KThcTr-BjDk4Fhxw0w?view
https://www.twblogs.net/a/5c21e4b3bd9eee16b4a76258