如何在Laravel Voyager后台通过Seeder添加自定义菜单链接?
在Laravel Voyager中通过Seeder添加自定义视图菜单链接的正确方式
你的菜单未显示主要是两个问题:同时设置了url和route字段导致渲染冲突,以及硬写id可能引发数据异常。以下是正确的实现方案:
核心修正点
- 不要同时填充
url和route字段,二选一即可(优先用路由,更符合Laravel规范) - 避免硬写
id,让数据库自增,防止数据冲突 - 按需设置权限,确保管理员能看到该菜单
完整Seeder代码
创建一个专用的Seeder文件(比如VoyagerMenuItemsSeeder.php),代码如下:
<?php namespace Database\Seeders; use Illuminate\Database\Seeder; use Illuminate\Support\Facades\DB; class VoyagerMenuItemsSeeder extends Seeder { public function run() { // 获取管理员菜单的ID(默认name为'admin',可根据实际调整) $adminMenuId = DB::table('menus')->where('name', 'admin')->value('id'); // 使用updateOrInsert避免重复添加,自动处理新增/更新 DB::table('menu_items')->updateOrInsert( ['title' => 'Importar Datos', 'menu_id' => $adminMenuId], [ 'target' => '_self', 'icon_class' => 'voyager-settings', 'color' => '#000000', 'parent_id' => null, 'order' => 11, 'route' => 'import.get', // 用路由时,url设为null 'url' => null, 'parameters' => null, 'permission' => null, // 不需要权限限制就设为null;需要的话填对应权限slug(比如'browse_import') 'created_at' => now(), 'updated_at' => now(), ] ); } }
后续操作
- 生成Seeder文件:
php artisan make:seeder VoyagerMenuItemsSeeder - 将上述代码替换到生成的文件中
- 运行Seeder:
php artisan db:seed --class=VoyagerMenuItemsSeeder - 清除缓存确保菜单生效:
php artisan cache:clear php artisan view:clear
额外注意事项
- 确认路由
import.get已正确定义在routes/web.php中,示例:Route::get('/import', [\App\Http\Controllers\ImportController::class, 'index']) ->name('import.get') ->middleware('admin'); // 确保管理员中间件生效 - 如果需要权限控制,先在Voyager后台创建对应权限(比如“浏览导入数据”,slug设为
browse_import),然后将Seeder中的permission字段改为该slug - 若菜单仍不显示,检查当前管理员账号是否拥有对应权限
内容的提问来源于stack exchange,提问作者José Vicente López Delgadillo
相关产品推荐
相关产品推荐

