Как следует подавать чванство из 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. Я обновлюсь, если придумаю более элегантный способ создания документации.