记住用户名密码
/** * 获取指定模块下所有的控制器和方法,注释 */ 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 条留言 其中:访客:0 条, 博主:0 条