Шаг 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 c "https://petstore.swagger.io/v2/swagger.json" ( url: "https://petstore.swagger.io/v2/swagger.json",), на "swagger.yaml" (url: "swagger.yaml",).
После запуска генерации документации, она будет доступна по пути http://сайт/api-doc (Путь может зависеть от ваших настроек .htacces, nginx, ...)
Если вы используете .htaccess из примеров этого сайта, то добавьте строку в корневого .htaccess:
RewriteRule ^api-doc/(.*)$ web/api-doc/$1 [L]
Комментарии
Комментарии отсутствуют, Вы можете быть первым