【发布时间】:2015-06-02 14:52:31
【问题描述】:
我有一个使用 Slim 框架构建的简单 RESTful API。
代码示例:
$app->group('/settings','authenticate','is_admin',function () use($app){
$app->get('/gear', function () use ($app) {
...
});
$app->group('/users',function() use($app){
$app->get('/', function () use ($app) {...});
$app->post('/', function () use ($app) {...});
$app->put('/:id', function ($id) use ($app) {...});
$app->delete('/:id', function () use ($app) {...});
});
});
现在,我需要构建一个简单的页面,将我的所有路由组列为“资源”,并将路由嵌套在每个组下,以便我可以为每个路由组/方法添加某种文本文档,稍后我会坚持在数据库或文件存储中。
总的来说,我的问题是:
- 是否已经存在类似的东西?
- 如何在 Slim Framework 中列出所有路由和路由组?
我目前的黑客:
$app->get('/', function () use ($app) {
$data=[];
//$router->routes is a protected variable, so i had to change it to public, same for $r->methods and pattern
foreach($app->router->routes as $r){
$x = explode('/',$r->pattern);
$x = $x[1];
$data[$x][$r->methods[0]][]=$r->pattern."[".implode(',',$r->middleware)."]";
}
print_r($data);
});
我给出的结果是这样的:
Array
(
[auth] => Array
(
[GET] => Array
(
[0] => /auth/me[authenticate]
[1] => /auth/logout[]
)
[POST] => Array
(
[0] => /auth/login[]
)
[DELETE] => Array
(
[0] => /auth/logout[]
)
)
[settings] => Array
(
[GET] => Array
(
[0] => /settings/classes[authenticate,is_admin]
[1] => /[authenticate,is_admin]
)
[POST] => Array
(
[0] => /settings/grades/:id/class[authenticate,is_admin]
[1] => /settings/grades/:id/subject[authenticate,is_admin]
[2] => /settings/departments/:id/grade[authenticate,is_admin]
[3] => /settings/subjects/:id/skills[authenticate,is_admin]
)
)
【问题讨论】:
-
我们在工作中一直使用Swagger 来处理我们基于 Java 的 REST API。它相当不错。但是,它要求您根据其规范显示它。也就是说,有一个Swagger-PHP 项目可以让你使用标准的文档块/注释来做到这一点。我可能会考虑挂钩这样的东西,或者只是普通的PHPDocumentor(尽管 phpdoc dosnt 有任何开箱即用的 API 特定标签)。
标签: php reflection slim