Laravel-Admin侧边栏添加新菜单链接报错:Call to a member function add() on array
问题解决:Laravel-Admin v1.8添加侧边栏菜单项报错「Call to a member function add() on array」
错误原因
你使用的Laravel-Admin v1.8.19中,\Encore\Admin\Facades\Admin::menu()方法返回的是菜单数组,并非可调用add()方法的对象,直接调用$menu->add()会触发该错误。
正确添加侧边栏菜单项的方法
方法一:在bootstrap.php中配置菜单
Laravel-Admin推荐的菜单配置位置是app/Admin/bootstrap.php,直接在该文件中添加以下代码:
use Encore\Admin\Facades\Admin; Admin::menu(function ($menu) { // 保留原有首页菜单 $menu->dashboard(); // 添加Overalls菜单项 $menu->add([ 'title' => '工作服管理', // 可自定义显示名称 'url' => admin_url('overalls'), 'icon' => 'fa-database', ]); });
方法二:通过CRUD控制器自动关联菜单(更简便)
既然已定义Route::resource('overalls', OverallController::class),可直接在OverallController的setup()方法中设置页面标题,Laravel-Admin会自动生成对应侧边栏菜单项:
// 在OverallController的setup()方法中 public function setup() { $this->title = '工作服管理'; // 设置页面标题,同时作为菜单名称 $this->resource('/overalls'); // 其他CRUD配置代码... }
完成后删除路由文件中错误的菜单添加代码,执行php artisan route:clear清除路由缓存,刷新页面即可看到菜单。
方法三:使用Menu模型创建(适合动态菜单)
若需动态生成菜单,可直接操作Menu模型写入数据库:
use Encore\Admin\Auth\Database\Menu; Menu::create([ 'parent_id' => 0, // 0表示顶级菜单 'order' => 1, // 排序优先级,数字越小越靠前 'title' => '工作服管理', 'icon' => 'fa-database', 'uri' => 'overalls', // 对应路由的URI ]);
这段代码可临时放在路由闭包中执行一次,执行后删除即可,菜单会自动在侧边栏显示(需确保角色有对应权限)。
注意事项
- 移除
app/Admin/routes.php中那段错误的菜单添加代码,避免冲突。 - 执行
php artisan route:clear清除路由缓存,确保新配置生效。 - 若开启了Laravel-Admin权限管理,需给对应角色分配该菜单的访问权限,否则无法看到菜单。
内容的提问来源于stack exchange,提问作者Pouya Vaghefi
相关产品推荐
相关产品推荐

