2018-08-03 17:03:45 340次浏览 2条回答 4 悬赏 10 金钱

现在需要做RBAC权限管理,但我不想一个 module->controller->action 的添加菜单,想一下循环出全部Module,controller,action|搞了两三天了。。。始终没找到解决办法

补充于 2018-08-03 17:07

现在能获取到 Module 的列表。。。contoller 啥的都没法遍历出来

  • 回答于 2018-08-03 18:10
    Yii::$app->getModule('user')->getControllerPath()
    

    通过获取模块下的控制器文件,来取到所有控制器的名称。

    2 条回复
    回复于 2018-08-03 18:37
    protected function actionGetcontrollersandactions()
    {
        $controllerlist = [];
        if ($handle = opendir('../controllers')) {
            while (false !== ($file = readdir($handle))) {
                if ($file != "." && $file != ".." && substr($file, strrpos($file, '.') - 10) == 'Controller.php') {
                    $controllerlist[] = $file;
                }
            }
            closedir($handle);
        }
        asort($controllerlist);
        $fulllist = [];
        foreach ($controllerlist as $controller):
            $handle = fopen('../controllers/' . $controller, "r");
            if ($handle) {
                while (($line = fgets($handle)) !== false) {
                    if (preg_match('/public function action(.*?)\(/', $line, $display)):
                        if (strlen($display[1]) > 2):
                            $fulllist[substr($controller, 0, -4)][] = strtolower($display[1]);
                        endif;
                    endif;
                }
            }
            fclose($handle);
        endforeach;
        return $fulllist;
    }
    

    https://stackoverflow.com/questions/27912988/retrieving-array-of-controllers-actions
    这是一个完整的例子。

    回复于 2018-08-04 16:33

    谢谢巡航舰哥!

  • 回答于 2018-08-08 13:21

    mark一下,这个不错

您需要登录后才可以回答。登录 | 立即注册
wpj130
试用期

wpj130

注册时间:2018-07-03
最后登录:2018-08-04
在线时长:1小时19分
粉丝1
金钱30
威望0
积分40

热门问题