Laravel-admin 实现多模块独立菜单需分离数据源、路由前缀与权限上下文:1. 为各模块创建独立菜单表(如 admin2_menu);2. 创建对应模型并配置 menu_table 和 menu_model;3. 设置独立 route.prefix(如 'admin2')及控制器命名空间;4. 在对应模块后台(如 /admin2/auth/menu)维护菜单。

在 Laravel-admin 中实现多模块(如 Admin、Admin2、Admin3)各自拥有独立菜单,核心在于**分离菜单数据源、路由前缀与权限上下文**,而不是共用同一套菜单表和模型。以下是清晰、可落地的操作步骤:
1. 为每个模块创建专属菜单表
不同模块不能共享 admin_menu 表,否则菜单会互相干扰。需为每个新模块建独立表,例如:
-
Admin2 模块:运行
php artisan make:migration create_admin2_menu_table - 在迁移文件中定义结构(字段与原表一致,仅表名不同):
Schema::create('admin2_menu', function (Blueprint $table) { ... }); - 执行
php artisan migrate生成表
2. 创建对应菜单模型并配置路径
每个模块需绑定自己的菜单模型类,避免读取错误表:
- 生成模型:
php artisan make:model Admin2\Menu(注意命名空间) - 在模型中指定表名:
protected $table = 'admin2_menu'; - 修改该模块的配置文件(如
config/admin2.php),设置:
'menu_table' => 'admin2_menu',<br> 'menu_model' => AppAdmin2Menu::class,
3. 配置独立路由前缀与控制器命名空间
确保各模块路由不冲突,且控制器能正确识别所属上下文:
- 在
config/admin2.php中设置:'route.prefix' => 'admin2' - 所有控制器放在
app/Admin2/Controllers/下,并使用命名空间AppAdmin2Controllers - 在
app/Admin2/routes.php中注册路由时,使用本模块的控制器,例如:$router->resource('users', UserController::class);
4. 在各自后台管理界面中维护菜单
菜单添加必须在对应模块后台操作,才能写入正确的菜单表:
- 访问
/admin2/auth/menu页面(而非/admin/auth/menu) - 新增菜单项时,路径(uri)填写的是本模块内有效的路由名,例如
admin2.users.index - 保存后数据自动写入
admin2_menu表,不影响其他模块


















