<?php namespace Admin\Controller; use Think\Controller; class AuthorController extends PublicController { /** * @note 获取控制器和action存放数据库 */ public function index(){ $modules = array('Admin'); //模块名称 $i = 0; foreach ($modules as $module) { $all_controller = $this->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( 'controller' => $controller, 'action' => $action, 'desc'=>$this->get_cc_desc($module,$controller,$action) ); $i++; } } } $result = D('Author')->updata($data); $this->assign('stat',$result); $this->display(); } /** * @note 获取控制器 * @param $module * @return array|null */ protected function getController($module){ if(empty($module)) return null; $module_path = APP_PATH . '/' . $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; } /** * @note 获取方法 * * @param $module * @param $controller * * @return array|null */ protected function getAction($module, $controller){ if(empty($controller)) return null; $content = file_get_contents(APP_PATH . '/'.$module.'/Controller/'.$controller.'Controller.class.php'); preg_match_all("/.*?public.*?function(.*?)\(.*?\)/i", $content, $matches); $functions = $matches[1]; //排除部分方法 $inherents_functions = array('login','logout','uppassword','_initialize');//如有排除方法添加此数组 $inherents_functions = array(); foreach ($functions as $func){ $func = trim($func); if(!in_array($func, $inherents_functions)){ if (strlen($func)>0) $customer_functions[] = $func; } } return $customer_functions; } /** * @note 获取函数的注释 * * @param $module Admin * @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('/@note(.*?)\n/',$tmp,$tmp); $tmp = trim($tmp[1][0]); $tmp = $tmp !='' ? $tmp:'无'; return $tmp; } }
thinkphp 获取后台所有控制器和action
最新推荐文章于 2022-09-23 09:07:28 发布