TP5 获取模块下的所有控制器命/方法名,用于权限表

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);
    }


    //获取所有控制器名称
    private function getController($module) {
        if (empty($module)) {
            return null;
        }
        $module_path = Env::get('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 = Env::get('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 {
            return false;
        }
        return null;
    }


}

 

你可能感兴趣的:(TP5 获取模块下的所有控制器命/方法名,用于权限表)