我尝试使用swagger与laravel来自动记录我们的RESTful API。我们的目标是将swagger注释保存在laravel控制器中,然后让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大师来说,这是提供这些swagger文件的最佳方式吗?我尝试将docs目录放在public中,但这会导致重定向循环。另一种方法是在我的web服务器配置中创建一个虚拟主机,直接指向这些swagger文件,但在这一点上,我宁愿不做这个额外的配置
我为Laravel编写了一个名为swaggervel的包,它使用swagger-php自动生成你的swagger json,并将其与redgeoff的代码一起提供,然后使用swagger-ui显示。
只需在composer.json中的require中添加以下行:
" jlapp/swaggervel":"dev-master"
或者你可以在Git上获取:https://github.com/slampenny/Swaggervel.git
我现在正在解决这个问题,我已经解决了重定向循环,但没有像我想的那样优雅。
只需在public/docs/
目录中添加一个.htaccess
文件,如下所示:
<IfModule mod_rewrite.c>
RewriteEngine On
</IfModule>
,您将能够访问该文件,而无需键入index.php。如果我想出一种更优雅的生成文档的方法,我会更新的。