🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
``` //获取模块下所有的控制器和方法 public function initperm() { $modules = array('api'); //模块名称 $i = 0; foreach ($modules as $module) { $all_controller = $this->getController($module); foreach ($all_controller as $controller) { $all_action = $this->getAction($module, $controller); foreach ($all_action as $action) { $controller = str_replace('Controller', '', $controller); $data[$i]['module'] = $module; $data[$i]['controller'] = $controller; $data[$i]['action'] = $action; //入库 if (!empty($module) && !empty($controller) && !empty($action)) { $rule_name = $module . '/' . $controller . '/' . $action; if (!$rule) { $idata = array(); $idata['module'] = strtolower($module . '/' . $controller); $idata['type'] = "1"; $idata['name'] = strtolower($rule_name); $idata['title'] = ""; $idata['regex'] = ""; $idata['status'] = "1"; } } $i++; } } } return $data; // echo '<pre>'; // print_r($data); // echo '</pre>'; } //获取所有控制器名称 private function getController($module) { if (empty($module)) { return null; } $module_path = APP_PATH . '/' . $module . '/controller/'; //控制器路径 if (!is_dir($module_path)) { return null; } $module_path .= '/*.php'; $ary_files = glob($module_path); foreach ($ary_files as $file) { if (is_dir($file)) { continue; } else { $files[] = basename($file, '.php'); } } return $files; } //获取所有方法名称 protected function getAction($module, $controller) { if (empty($controller)) { return null; } $customer_functions = []; $file = APP_PATH . $module . '/controller/' . $controller . '.php'; if (file_exists($file)) { $content = file_get_contents($file); 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; } else { // \ticky\Log::record('is not file ' . $file, Log::INFO); return false; } return null; } ```