我正在尝试使用带有laravel的swagger来自动记录我们的RESTful API . 目标是在laravel控制器中保持swagger注释,然后swagger解析注释并生成相关的.json / .php文件 . 理想情况下,我希望laravel项目能够提供swagger文件,以便将所有内容保存在同一个引擎盖下并保持同步 .
为了实现这一点,我在laravel项目的根目录中创建了一个docs目录(public所在的目录) . 然后我将以下路由添加到routes.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目录公开,但这会导致重定向循环 .
另一种实现此目的的方法是在我的Web服务器配置中创建一个直接指向这些swagger文件的虚拟主机,但此时我不想进行额外的配置 .
2 回答
我写了一个swaggervel,一个Laravel包,它使用swagger-php自动生成你的swagger json,用redgeoff的代码提供它,然后使用swagger-ui显示它 .
只需在composer.json中的require中添加以下行:
“jlapp / swaggervel”:“dev-master”
或者你可以在Git上得到它:https://github.com/slampenny/Swaggervel.git
我现在正在研究这个问题,我已经解决了重定向循环,但没有像我想的那样优雅 .
只需在
public/docs/
目录中添加.htaccess
文件,即可:你可以在不输入index.php的情况下访问该文件 . 如果我想出一种更优雅的文档生成方式,我会更新 .