PHP获取所有的控制器与方法(可自定义过滤)

文中代码已上传至github,需要的同学自行拉取:https://github.com/LeeToug/CtlAct

如果你觉得拉取麻烦的话,可直接使用composer require ctlacl/ctlact命令加载到你的项目中使用!!!

前几天我写的一个thinkphp5的项目需要配备权限系统,考虑到乱七八糟的各种问题,最后定了一个思路:

将当前项目中所有的控制器与方法全部获取,然后加入到权限系统中去,当然,中间还需要有一些过滤的操作,然后将获取到的控制器与方法入库,然后在给不同的角色配置相应的权限即可!

这里我主要将获取控制器与获取方法的代码写一下,避免后面会先重复造轮子的情况。

1.获取当前项目中所有的控制器

function getnewctl($path){
    //查询**模块所有控制器
    $pathList = glob($path. '/*.php');
    foreach($pathList as $key => $value) {
        $controllers[] = basename($value, '.php');
    }
    $cro_filter = ['Menu','Common','Base','Test','School','Login','index'];
    $newctl = array_diff($controllers,$cro_filter);
    return $newctl;
}

2.获取当前项目中所有的方法

function getaction($model,$controller,$filteraction=[]){
    //需要过滤的action方法
    $filter = ['_initialize','__construct','getValidate','getCode','beforeAction','fetch','display','assign','engine','validateFailException'
        ,'validate','success','error','result','redirect','getResponseType','test'];
    //添加需要过滤的方法
    if(!empty($filteraction)){
        foreach ($filteraction as $va){
            $filter[] = $va;
        }
    }
    //找到所有action操作方法
    $actions = array();
    $actions[] = get_class_methods(\controller($model."/".$controller));
    //过滤掉定义的操作方法
    $attr = array();
    foreach ($actions as $key=>$val){
        foreach ($val as $v){
            if(!in_array($v,$filter)){
                $attr[] = $v;
            }
        }
    }
    return $attr;
}

后面的一些操作就简单了,这里我就不写了,有兴趣的同学可以留言或者在我的git上面直接拉取代码。

git:https://github.com/LeeToug/CtlAct

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章