配置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相关的权限,页面会显示为空(而非直接提示无权限)。
- 解决步骤:
确保你使用的是超级管理员账号,或者手动给对应角色分配权限:- 先通过代码给账号快速分配超级权限(比如在入口脚本或控制器中临时添加):
$auth = Yii::$app->authManager; $adminRole = $auth->createRole('admin'); $auth->add($adminRole); $auth->assign($adminRole, Yii::$app->user->id); // 替换为你的用户ID - 之后进入后台的权限分配页面,给
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
相关产品推荐
相关产品推荐

