zoukankan      html  css  js  c++  java
  • PHP获取项目所有控制器方法名称

    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 {
                	ickyLog::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 = '规则表';
    

      

  • 相关阅读:
    20080619 SQL SERVER 输入 NULL 的快捷键
    20090406 Adobe的“此产品的许可已停止工作”错误的解决办法
    20080908 Office Powerpoint 2007 不能输入中文的解决办法
    20080831 ClearGertrude Blog Skin 's cnblogs_code class
    20080603 Facebook 平台正式开放
    20080519 安装 Microsoft SQL Server 2000 时提示 创建挂起的文件操作
    test
    Linux—fork函数学习笔记
    SOA的设计理念
    Why BCP connects to SQL Server instance which start with account of Network Service fail?
  • 原文地址:https://www.cnblogs.com/luomingui/p/8444813.html
Copyright © 2011-2022 走看看