getController($module); foreach ($all_controller as $controller) { $controller_name = $controller; $all_action = $this->getAction($module, $controller_name); foreach ($all_action as $action) { $data[$i] = array( 'name' =>$module.'//m.sbmmt.com/m/'. $controller . '//m.sbmmt.com/m/' . $action, 'status' => 1, 'desc'=>$this->get_cc_desc($module,$controller,$action) ); $i++; } } } echo ''; print_r($data); } /** * @cc 获取所有控制器名称 * * @param $module * * @return array|null */ protected function getController($module){ if(empty($module)) return null; $module_path = APP_PATH . '//m.sbmmt.com/m/' . $module . '/Controller/'; //控制器路径 if(!is_dir($module_path)) return null; $module_path .= '/*.class.php'; $ary_files = glob($module_path); foreach ($ary_files as $file) { if (is_dir($file)) { continue; }else { $files[] = basename($file, C('DEFAULT_C_LAYER').'.class.php'); } } return $files; } /** * @cc 获取所有方法名称 * * @param $module * @param $controller * * @return array|null */ protected function getAction($module, $controller){ if(empty($controller)) return null; $content = file_get_contents(APP_PATH . '//m.sbmmt.com/m/'.$module.'/Controller/'.$controller.'Controller.class.php'); preg_match_all("/.*?public.*?function(.*?)\(.*?\)/i", $content, $matches); $functions = $matches[1]; //排除部分方法 $inherents_functions = array('_before_index','_after_index','_initialize','__construct','getActionName','isAjax','display','show','fetch','buildHtml','assign','__set','get','__get','__isset','__call','error','success','ajaxReturn','redirect','__destruct','_empty'); foreach ($functions as $func){ $func = trim($func); if(!in_array($func, $inherents_functions)){ if (strlen($func)>0) $customer_functions[] = $func; } } return $customer_functions; } /** * @cc 获取函数的注释 * * @param $module Home * @param $controller Auth * @param $action index * * @return string 注释 * */ protected function get_cc_desc($module,$controller,$action){ $desc=$module.'\Controller\\'.$controller.'Controller'; $func = new \ReflectionMethod(new $desc(),$action); $tmp = $func->getDocComment(); $flag = preg_match_all([email protected](.*?)\n/',$tmp,$tmp); $tmp = trim($tmp[1][0]); $tmp = $tmp !='' ? $tmp:'无'; return $tmp; }}
其中注释必须采用固定格式,
/** * @cc index主页面 */
适用于ThinkPHP 3.2.2 ,适合用auth 认证时,直接提取所有的控制器及方法名,可以获取注释。非常方便。
参考:
1、http://www.thinkphp.cn/code/718.html
2、http://www.thinkphp.cn/topic/10357.html
声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。上一条:4. class 与type的区别 下一条:PHP的一些案例研究(2)相关文章
查看更多
- PHP Workerman 基础与实战:即时通讯聊天系统(ThinkPHP6)
¥189
¥399已抢16524个
抢
- 自己动手写 PHP MVC 框架(40节精讲/巨细/新人进阶必看)
¥59
¥199已抢49465个
抢
- 前端基础到实战(HTML5+CSS3+ES6+NPM)
¥800
¥1200已抢16557个
抢
- PHP基础到实战(PHP+MySQL)
¥800
¥1200已抢8743个
抢
- 前端开发(基础+实战项目合集)
¥800
¥1200已抢4374个
抢
- PHP编程(基础知识点汇总)
¥800
¥1200已抢4300个
抢