Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/244.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/selenium/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 在框架中生成自动文档_Php_Reflection_Slim - Fatal编程技术网

Php 在框架中生成自动文档

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-

我有一个简单的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->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);
});
现在,我需要构建一个简单的页面,将我的所有路由组列为“资源”,并将路由嵌套在每个组下,这样我就可以为每个路由组/方法添加某种文本文档,我将稍后保存在数据库或文件存储中

总之,我的问题是:

  • 这样的事情已经存在了吗
  • 如何在Slim框架中列出所有路由和路由组
  • 我当前的黑客:

    $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的现成标签)。