PHP獲取項目所有控制器方法名稱
//獲取模塊下所有的控制器和方法寫入到權限表 public function initperm() { $modules = array('admin'); //模塊名稱 $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; $rule = M()->table('tky_authrule')->where('name="' . strtolower($rule_name) . '"')->find(); if (!$rule) { $idata = array(); $idata['module'] = strtolower($module . '-' . $controller); $idata['type'] = "1"; $idata['name'] = strtolower($rule_name); $idata['title'] = ""; $idata['regex'] = ""; $idata['status'] = "1"; M()->table('tky_authrule')->add($idata); } } $i++; } } } echo '<pre>'; print_r($data); echo '</pre>'; } //獲取所有控制器名稱 private function getController($module) { if (empty($module)) { return null; } $module_path = APP_PATH . '/' . $module . '/controllers/'; //控制器路徑 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; } $file = APP_PATH . $module . '/controllers/' . $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 null; }
mysql
DROP TABLE IF EXISTS tky_authrule; CREATE TABLE tky_authrule ( ruleid MEDIUMINT (8) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '編號', module VARCHAR (20) NOT NULL DEFAULT '' COMMENT '規則所屬module', type TINYINT (1) NOT NULL DEFAULT '1' COMMENT '類型 1-url;2-主菜單', name CHAR (80) NOT NULL DEFAULT '' COMMENT '規則唯一英文標識', title CHAR (20) NOT NULL DEFAULT '' COMMENT '規則中文描述', regex CHAR (100) NOT NULL DEFAULT '' COMMENT '規則表達式', status TINYINT (1) NOT NULL DEFAULT '1' COMMENT '狀態', PRIMARY KEY (ruleid) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT = '規則表';