You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

配置mdmsoft/yii2-admin后路由列表为空,原因何在?

排查mdmsoft/yii2-admin路由列表为空的原因

我来帮你梳理下Yii2基础模板中配置mdm-admin后路由列表为空的常见原因,结合你的配置细节,逐一排查:

1. 未执行RBAC及mdm-admin的数据库迁移

你配置了yii\rbac\DbManager作为权限管理组件,但如果没运行对应的迁移脚本,RBAC核心表和mdm-admin的扩展表都不存在,系统没办法存储和读取路由数据。

  • 解决步骤:
    在项目根目录的命令行中依次执行以下迁移命令:
    # 执行Yii2自带的RBAC迁移
    yii migrate --migrationPath=@yii/rbac/migrations
    # 执行mdm-admin扩展的迁移
    yii migrate --migrationPath=@mdm/admin/migrations
    

2. 未开启路由自动扫描或未手动导入路由

mdm-admin默认不会自动扫描并导入项目中的所有路由,需要先开启路由管理的扫描功能,再手动触发导入操作。

  • 解决步骤:
    首先修改admin模块的配置,添加controllerMap来指定路由控制器:
    'modules' => [
        // ...其他模块
        'admin' => [
            'class' => 'mdm\admin\Module',
            'layout' => 'right-menu',
            'mainLayout' => '@app/views/layouts/main.php',
            'controllerMap' => [
                'route' => [
                    'class' => 'mdm\admin\controllers\RouteController',
                    'searchClass' => 'mdm\admin\models\RouteSearch',
                ],
            ],
        ],
        // ...其他模块
    ],
    
    配置完成后,登录后台进入路由管理页面,点击右上角的「导入」按钮,系统会自动扫描项目中所有可用的路由并添加到列表中。

3. 当前用户无访问路由管理的权限

如果当前登录的账号没有admin/route相关的权限,页面会显示为空(而非直接提示无权限)。

  • 解决步骤:
    确保你使用的是超级管理员账号,或者手动给对应角色分配权限:
    1. 先通过代码给账号快速分配超级权限(比如在入口脚本或控制器中临时添加):
      $auth = Yii::$app->authManager;
      $adminRole = $auth->createRole('admin');
      $auth->add($adminRole);
      $auth->assign($adminRole, Yii::$app->user->id); // 替换为你的用户ID
      
    2. 之后进入后台的权限分配页面,给admin角色添加admin/route/*的权限。

4. 权限控制规则限制了路由扫描

如果配置了as access权限过滤组件,可能不小心限制了admin模块的路由扫描操作,导致无法读取路由数据。

  • 解决步骤:
    检查components中的as access配置,确保允许admin模块的所有操作(初始化完成后再按需调整):
    'components' => [
        // ...其他组件
        'as access' => [
            'class' => 'mdm\admin\components\AccessControl',
            'allowActions' => [
                'site/*',
                'admin/*', // 临时允许admin模块的所有操作,方便初始化
                // 其他需要公开的操作
            ]
        ],
        // ...其他组件
    ],
    

5. 路由缓存未更新

Yii2会缓存路由信息,如果之前的缓存未清空,新的路由不会被加载到列表中。

  • 解决步骤:
    清除项目的缓存:
    • 直接删除项目根目录下runtime/cache文件夹中的所有文件;
    • 或者执行命令行命令:
      yii cache/flush-all
      

内容的提问来源于stack exchange,提问作者Shringiraj Dewangan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.07 18:37:28