TP5 获取所有模块名/控制器命/方法名

一:日志需求,需要一个表记录所有的 模块名/控制器命/方法名(还有注释),但是注释还未解决。希望有大佬指点下

//获取模块下所有的控制器和方法写入到权限表
    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 = db('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";
                           db('authrule')->insert($idata);
                        }
                    }

                    $i++;
                }
            }
        }
        echo '
';
        print_r($data);
        echo '
'; } //获取所有控制器名称 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; }

你可能感兴趣的:(PHP,ThinkPHP5)