Крок 1. Встановлюємо необхідні бібліотеки
Встановлюємо бібліотеку zircote/swagger-php за допомогою composer
composer require --dev zircote/swagger-php
Завантажуємо https://github.com/swagger-api/swagger-ui та розпаковуємо вміст папки dist до папки де буде знаходитися документація, наприклад web/api-doc.
Додаємо анотації до екшенів. Приклад є в документації та прикладах (папки docs та examples) https://github.com/zircote/swagger-php . Це можна зробити і пізніше, але тоді документація буде порожня.
Приклад анотації:
/** * @OA\Info(title="My First API", version="0.1") */
Крок 2. Створюємо дію генерації документації на основі анотацій для Swagger
Створюємо контролер Swagger, для генерації документації (controllers/SwaggerController):
<?php
namespace app\controllers;
use yii\console\Controller;
use Yii;
use function OpenApi\scan;
class SwaggerController extends Controller
{
public function actionGo()
{
$openApi = scan(Yii::getAlias('@app/modules/api/controllers'));
$file = Yii::getAlias('@app/web/api-doc/swagger.yaml');
$handle = fopen($file, 'wb');
fwrite($handle, $openApi->toYaml());
fclose($handle);
return ;
}
}
Де
scan(Yii::getAlias('@app/modules/api/controllers'))
- папка з кодом та анотаціями для документування, тут ми вказали тільки один модуль для документування.
$file = Yii::getAlias('@app/web/api-doc/swagger.yaml');
- папка, в яку було скопійовано swagger-ui/dist (у прикладі це: web/api-doc).
Або створюємо консольну дію: (commands/SwaggerController):
<?php
namespace app\commands;
use yii\console\Controller;
use Yii;
use yii\console\ExitCode;
use yii\helpers\Console;
use function OpenApi\scan;
class SwaggerController extends Controller
{
public function actionGo()
{
$openApi = scan('@app/modules/api/controllers');
$file = Yii::getAlias('@web/api-doc/swagger.yaml');
$handle = fopen($file, 'wb');
fwrite($handle, $openApi->toYaml());
fclose($handle);
echo $this->ansiFormat('Created \n", Console::FG_BLUE');
return ExitCode::OK;
}
}
Запускаємо через консоль
php yii swagger/go
Крок 3. Зміна налаштувань для Swagger
Далі відкриваємо файл index.html у папці з документацією (у прикладі @app/web/api-doc/) І змінюємо параметр url з "https://petstore.swagger.io/v2/swagger.json" ( url: "https://petstore.swagger.io/v2/swagger.json", ), на "swagger.yaml" ( url: "swagger.yaml", ).
Після запуску генерації документації, вона буде доступна за адресою http://site/api-doc (Адреса може залежати від ваших налаштувань .htacces, nginx, ...)
Якщо ви використовуєте .htaccess із прикладів кодер.укр, то додайте рядок до кореневого .htaccess:
RewriteRule ^api-doc/(.*)$ web/api-doc/$1 [L]


