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

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