Как следует подавать чванство из Laravel?

Я пытаюсь использовать swagger с laravel для автоматического документирования нашего RESTful API. Цель состоит в том, чтобы сохранить комментарии swagger в контроллерах laravel, а затем swagger проанализировать комментарии и сгенерировать связанные файлы.json /.php. В идеале, я хочу, чтобы проект laravel обслуживал файлы swagger, чтобы все было в одном месте и синхронизировано.

Для этого я создал каталог docs в корневом каталоге моего проекта laravel (тот же каталог, в котором находится public). Затем я добавил следующий маршрут к route.php:

Route::get('docs/{page?}', function($page='index.php') {
    header('Access-Control-Allow-Origin: *');
    $parts = pathinfo($page);
    $path = $_SERVER["DOCUMENT_ROOT"] . "/../docs/$page";
    if ($parts['extension'] === 'php') {
        require($path);
    } else {
        return file_get_contents($path);
    }
});

Используя этот метод, я могу указать на своем веб-сайте swagger-ui http://mydomain/docs, а остальное - просто волшебство.

Для всех вас, гуру Laravel, это лучший способ обслуживать эти чванливые файлы? Я попытался сделать каталог docs публичным, но это привело к циклу перенаправления.

Еще один способ сделать это - создать виртуальный хост в конфигурации моего веб-сервера, который будет указывать непосредственно на эти файлы чванства, но на этом этапе я бы предпочел не выполнять эту дополнительную настройку.

2 ответа

Я написал swaggervel, пакет для Laravel, который автоматически генерирует ваш swagger json с помощью swagger-php, обрабатывает его с помощью кода redgeoff и затем отображает его с помощью swagger-ui.

Просто добавьте следующую строку в файл require в вашем composer.json:

"jlapp / swaggervel": "dev-master"

В качестве альтернативы вы можете получить его на Git: https://github.com/slampenny/Swaggervel.git

Я работаю над этим сейчас, я решил цикл перенаправления, но не так элегантно, как хотелось бы.

Просто добавьте .htaccess файл в вашем public/docs/ реж со следующим:

<IfModule mod_rewrite.c>
    RewriteEngine On
</IfModule>

Вы сможете получить доступ к файлу без ввода index.php. Я обновлюсь, если придумаю более элегантный способ создания документации.

Другие вопросы по тегам