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 {
            \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 = '規則表';

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM