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 . '/*.php');
    $res = [];
    foreach ($pathList as $key => $value) {
        $res[] = basename($value, '.php');
    }
    return $res;
}

/**
 * 获取控制器下所有方法信息
 */
function getActions($className)
{
    //需检查对应模块路径是否正确
    $className = '\app\admin\controller\\' . $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();
    //通过正则获得想要的注释信息
    /**
     * 注释格式
     * @title 部门列表
     */
//    preg_match_all('/@title(.*?)[\r\n|\n]/', $doc, $method);

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

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

/**
 * 获取方法注释信息
 */
function cc_get_desc($doc)
{
    $method = array();
    $tmp = array();
    //通过正则获得想要的注释信息
    /**
     * 注释格式
     * @title 部门列表
     */
    //preg_match_all('/@method(.*?)[\r\n|\n]/', $doc, $method);
    //preg_match_all('/@title(.*?)[\r\n|\n]/', $doc, $tmp);

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

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

注释格式分以下两种:

    /**
     * 注释格式
     * @title 部门列表
     */

     /**
     * 注释格式:这种是引用了tp6框架apidoc接口文档(接口文档文档地址:https://hgthecode.github.io/thinkphp-apidoc/use/)
     * @Apidoc\Title("部门列表")
     * @Apidoc\Method("POST")
     */  

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

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值