如何从laravel服务?

时间:2014-05-07 00:20:18

标签: file laravel static swagger serving

我尝试使用swagger和laravel自动记录我们的RESTful API。目标是在laravel控制器中保持swagger注释,然后swagger解析注释并生成相关的.json / .php文件。理想情况下,我希望laravel项目能够提供swagger文件,以便将所有内容保存在同一个引擎盖下并保持同步。

为了实现这一目标,我在laravel项目的根目录( public 所在的目录)中创建了一个 docs 目录。然后,我将以下路由添加到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 目录放在 public 中,但这会导致重定向循环。

另一种实现此目的的方法是在我的Web服务器配置中创建一个直接指向这些swagger文件的虚拟主机,但此时我不想进行额外配置。

2 个答案:

答案 0 :(得分:8)

我写了一个swaggervel,一个Laravel包,它使用swagger-php自动生成你的swagger json,用redgeoff的代码提供它,然后用swagger-ui显示它。

只需在composer.json中添加以下行:

" jlapp / swaggervel":" dev-master"

或者你可以在Git上获得它:https://github.com/slampenny/Swaggervel.git

答案 1 :(得分:0)

我现在正在研究这个问题,我已经解决了重定向循环但不像我想的那样优雅。

只需在.htaccess目录中添加public/docs/文件即可:

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

您无需键入index.php即可访问该文件。如果我想出一种更优雅的文档生成方式,我会更新。