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

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值