栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Thinkphp6框架获取指定模块下控制器,方法及注释信息

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Thinkphp6框架获取指定模块下控制器,方法及注释信息

Thinkphp6框架获取指定模块下控制器,方法及注释信息

经常我们在做项目前后分离情况下需要做后台管理系统用户权限功能,需要扫描控制器下功能块(方法),整理记录下以便后期使用更快捷

直接上代码:

获取指定模块下所有的控制器和方法,注释

 
    public function data()
    {
        //获取指定模块下所有控制器信息
        $result = getControllers('../app/admin/controller');

        //剔除不需要获取方法和注释的控制器,看自己需求
//        $tempArr = array_flip($result);
//        unset($tempArr['Base']);
//        unset($tempArr['Login']);
//        $result = array_flip($tempArr);
        //
        foreach ($result as $k => $v) {
            //获取注释信息
            $info = getActions($v);
            $data = [];
            foreach ($info['methods'] as $kk => $vv) {
                //将字符串分割成数组
                $array = explode('/', $vv);
                var_dump($array);
                die();
                //拿到数据后根据自己的需求写入数据库,以下就不做展示了

            }

        }

    }

以下方法我写在公共控制器下的

function getControllers($dir)
{
    $pathList = glob($dir . '
function getActions($className)
{
    //需检查对应模块路径是否正确
    $className = 'appadmincontroller\' . $className;
    $methods = array();
    //获得控制器表头注释
    $header = (new ReflectionClass($className))->getDocComment();
    $header_msg = cc_header_desc($header);
    //获取方法注释
    $rMethods = (new ReflectionClass($className))->getMethods();
    foreach ($rMethods as $m) {
        $doc = $m->getDocComment();
        $s = cc_get_desc($doc);
        if ($s != '/') {
            array_push($methods, $m->getName() . '/' . $s);
        }
    }

    $res = [
        'header' => $header_msg,
        'methods'=>$methods
    ];
    return $res;
}


function cc_header_desc($doc)
{
    $method = array();
    //通过正则获得想要的注释信息
    
//    preg_match_all('/@title(.*?)[rn|n]/', $doc, $method);

    //通过正则获得想要的注释信息:因为注释信息格式问题,匹配对应正则
    
    preg_match_all('/@Apidoc\\Title("([Ww]*?)")/', $doc, $method);

    return trim($method[1][0] ?? "");
}


function cc_get_desc($doc)
{
    $method = array();
    $tmp = array();
    //通过正则获得想要的注释信息
    
    //preg_match_all('/@method(.*?)[rn|n]/', $doc, $method);
    //preg_match_all('/@title(.*?)[rn|n]/', $doc, $tmp);

    //通过正则获得想要的注释信息:因为注释信息格式问题,匹配对应正则
    
    preg_match_all('/@Apidoc\\Title("([Ww]*?)")/', $doc, $method);
    preg_match_all('/@Apidoc\\Method("([Ww]*?)")/', $doc, $tmp);

    return trim($method[1][0] ?? "") . '/' . trim($tmp[1][0] ?? "");
}

注释格式分以下两种:

    

       

到此获取指定模块下控制器及注释信息就结束了,具体需求按照自己需求整理

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1004396.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号