Шаг 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]