ThinkPHP 3.2.2 获取项目所有方法名称,用途:呵呵!
如果使用了多级控制器,请自行修改代码。
public function index(){ $modules = array('Admin'); //模块名称 $i = 0; foreach ($modules as $module) { $all_controller = $this->getController($module); foreach ($all_controller as $controller) { $controller_name = $module.'/'.$controller; $all_action = $this->getAction($controller_name); foreach ($all_action as $action) { $data[$i]['module'] = $module; $data[$i]['controller'] = $controller; $data[$i]['action'] = $action; $i++; } } } echo '<pre>'; print_r($data); } //获取所有控制器名称 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; } //获取所有方法名称 protected function getAction($controller){ if(empty($controller)) return null; $con = A($controller); $functions = get_class_methods($con); //排除部分方法 $inherents_functions = array('_initialize','__construct','getActionName','isAjax','display','show','fetch','buildHtml','assign','__set','get','__get','__isset','__call','error','success','ajaxReturn','redirect','__destruct', '_empty'); foreach ($functions as $func){ if(!in_array($func, $inherents_functions)){ $customer_functions[] = $func; } } return $customer_functions; }
改了下,用正则获取所有公共方法
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( 'name' => $controller . '_' . $action, 'status' => 1 ); $i++; } } } echo '<pre>'; print_r($data); } //获取所有控制器名称 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; } //获取所有方法名称 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('_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)){ $customer_functions[] = $func; } } return $customer_functions; }