Php 在框架中生成自动文档
我有一个简单的RESTful API,它已经使用Slim框架构建 代码示例:Php 在框架中生成自动文档,php,reflection,slim,Php,Reflection,Slim,我有一个简单的RESTful API,它已经使用Slim框架构建 代码示例: $app->group('/settings','authenticate','is_admin',function () use($app){ $app->get('/gear', function () use ($app) { ... }); $app->group('/users',function() use($app){ $app-
$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) {...});
});
});
$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);
});
现在,我需要构建一个简单的页面,将我的所有路由组列为“资源”,并将路由嵌套在每个组下,这样我就可以为每个路由组/方法添加某种文本文档,我将稍后保存在数据库或文件存储中
总之,我的问题是:
$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) {...});
});
});
$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]
)
)
所以我想做的正是这个,它有一些局限性,但它会让你走到这一步 我使用slim中间件并创建了自己的中间件。 然后每次使用路由时,我都会得到请求模式和方法。如果是get,我将使用phps反射函数来获取变量类型integer或string。如果它是一篇文章,我会让请求主体解析它并获得变量类型。然后,我将这些文件保存到一个json文件中(每个路由一个文件),半遵循swagger ui规范。然后,我将swagger ui指向另一个php脚本,该脚本将查看包含所有json文件的目录,我将所有这些文件放在一起,我将它们放在一个遵循swagger ui json规范的json文件中,并将该json回送到swagger ui 这种方法留下了很多不尽如人意的地方,就像对一切事物的描述一样,但它使我们达到了目的。。这行有东西 ` `不管怎样,我希望这会有帮助 我们一直在使用基于Java的RESTAPI。非常好。然而,它要求你根据它的规范来展示它。也就是说,有一个项目允许你使用标准的文档块/注释来做到这一点。我可能会考虑挂接类似的东西,或者只是普通的(尽管phpdoc没有任何特定于API的现成标签)。