请问怎样获取每个controller里面的函数(method)
各位大哥,我想编写一个功能是对各用户进行访问权限设置,需要编写函数,遍历个个controller里面的函数,生成完整的访问路径进行勾选。
读取 ci/applicaiton/controllers里面的个个php文件,获取每个php文件里面的函数。
例如 ci/application/controllers/abc.php, 获取里面的函数fun1, fun2, fun3
在页面显示
ip/abc/fun1
ip/abc/fun2
ip/abc/fun3
供管理员勾选。
controllers目录下的文件可以通过简单的php函数遍历,但是怎么加载获取controller里面的函数就不懂了。
麻烦指教。 用正则试试 Hex 发表于 2018-12-23 00:39
用正则试试
这个方法太笨,代码也不好写。 本帖最后由 eemengnan 于 2018-12-23 23:06 编辑
既然没有人回答,我就自己摸索好了,今天写了一下,编写了一个library文件。
希望帮到有同样需求的同学。
library文件afunction.php
<?php defined('BASEPATH') OR exit('No direct script access allowed');
class Afunction {
// Controllers 主路径 : ci/application/controllers/
protected $ctrPATH = APPPATH.'controllers'.DIRECTORY_SEPARATOR;
// php 扩展名
protected $extNAME = '.php';
public function get_controllers($path = NULL) {
// $path : 相对路径
if (!is_null($path)) {
$path = $path . DIRECTORY_SEPARATOR; }
// $fullpath : 绝对路径
$fullpath = $this->ctrPATH . $path;
if (is_dir($fullpath)) {
// 子文件数组
$itemArray = array();
// 打开目录
$dir = opendir($fullpath);
while ($item = readdir($dir)) {
// 跳过 . 和 .. 目录
if ($item == '.' OR $item == '..') { continue; }
// 判断文件类型:目录?PHP文件?其他
$filenameArray = explode('.', $item);
if (count($filenameArray) == 1) { // 目录
// 遍历子目录
$this->get_controllers($path.$item);
} elseif ($filenameArray == 'php') { // PHP文件
echo "---> PATH " . $path . " Controler " . $filenameArray . " php <br>";
$a = $this->get_methods($path, $filenameArray);
var_dump($a);
} else { /* 其他文件,不做处理 */ }
}
// 关闭目录
closedir($dir);
}
}
// 获取类文件中的函数名称
public function get_methods($path = NULL, $classname) {
require_once( $this->ctrPATH . $path . $classname . $this->extNAME );
return get_class_methods($classname);
}
}
cotroller 里面调用的函数
public function NodeList() {
$this->load->library('Afunction');
$this->afunction->get_controllers();
}
所有类都 require 一次?如果每次请求都全部 require 一次会不会影响性能? 本帖最后由 instrye 于 2018-12-25 14:40 编辑
权限控制不是这样做的,一般都是先有路径 再有模块 路径是存在数据库里的 你这样一次性把所有控制器文件都引入了太浪费资源 instrye 发表于 2018-12-25 14:37
权限控制不是这样做的,一般都是先有路径 再有模块 路径是存在数据库里的 你这样一次性把所有控制器文件都引 ...
我的代码只是初始化使用,自动遍历Controller文件夹里面的各个类及其函数。然后存储在数据库中。 Hex 发表于 2018-12-24 10:40
所有类都 require 一次?如果每次请求都全部 require 一次会不会影响性能?
我需求的只是初始化各个controller及其函数,然后就存储在数据库 。
实际使用中每次都输查询数据库的存储的路径。
当PHP代码发生改变才调用此函数重新刷新数据库信息。
页:
[1]