9

我正在尝试使用swagger和 laravel 来自动记录我们的 RESTful API。目标是将 swagger 注释保留在 laravel 控制器中,然后让 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 大师,这是提供这些 swagger 文件的最佳方式吗?我尝试将docs目录公开,但这会导致重定向循环。

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

4

2 回答 2

8

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

只需将以下行添加到 composer.json 中的要求:

“jlapp/swaggervel”:“开发大师”

或者,您可以在 Git 上获取它:https ://github.com/slampenny/Swaggervel.git

于 2014-07-08T22:53:00.330 回答
0

我现在正在处理这个问题,我已经解决了重定向循环,但没有我想要的那么优雅。

只需.htaccess在您的目录中添加一个文件,public/docs/其中包含以下内容:

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

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

于 2014-05-14T16:05:34.607 回答