您现在的位置是:首页 > 经验记录>PHP入门到跑路>PHP获取项目所有控制器方法名称 网站首页 PHP入门到跑路
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 = '规则表';
转载,原文地址:https://blog.csdn.net/weixin_34208283/article/details/86443404
随机推荐
- Laravel 使用 laravel-snappy 包 实现 HTML 转 PDF 和 PNG
- Laravel路由笔记,参数包含斜杠"/"如何处理?非必须参数如何定义?
- ceph-记一次OSD坏盘测试
- 在 Laravel 中使用 基于Workerman 的Gateway-worker进行 socket 长连接通讯
- 各网盘使用油猴进行链接读取的操作方式
- cywin安装后怎么安装新的软件
- 可扩展高可用 Seafile 集群
- Mysql常用、查询,修改,删除等方法
- 微信支付关于你只有p12文件时, 我们却需要pem文件怎么办?
- mqtt服务器(emqx)如何在页面使用webSocket连接?(可带用户名密码认证)
文章评论
未开放






