删除菜单后侧边栏未更新是因Laravel-admin默认启用菜单缓存,需手动清除:执行php artisan cache:clear、清理Redis中admin_menu_*键或临时禁用config/admin.php中的menu.cache配置。

删除菜单后侧边栏没更新,不是菜单没删掉,而是Laravel-admin把菜单结构缓存了——它默认会缓存导航栏(sidebar)的生成结果,避免每次请求都重新读取配置和权限判断。这个缓存不随菜单配置文件或数据库变更自动失效,必须主动处理。
确认是否启用了菜单缓存
Laravel-admin 的菜单渲染逻辑在 src/Menu/Menu.php 中,其缓存行为受两个因素控制:
-
系统级缓存开关:检查
config/admin.php中'menu' => ['cache' => true]是否开启(默认为true) -
底层缓存驱动:查看
config/cache.php的default配置,若为file,缓存文件在storage/framework/cache/data/下;若为redis,则需对应清理 Redis 中带admin_menu_*前缀的 key
快速清除菜单缓存的三种方式
推荐按顺序尝试,多数情况第一种即可解决:
- 执行
php artisan cache:clear—— 这会清空所有应用缓存,包括菜单结构(前提是菜单使用了Cache::remember()或类似逻辑,而 Laravel-admin 默认正是如此) - 若使用 Redis/Memcached,手动清除菜单专属 key:
redis-cli -a your_password keys "admin_menu_*" | xargs redis-cli -a your_password del - 临时禁用菜单缓存:在
config/admin.php中设'menu' => ['cache' => false],再刷新页面。确认菜单已更新后,可恢复为true并配合后续部署流程固化缓存策略
防止下次删菜单又失效
长期来看,建议把菜单缓存纳入部署流程,而不是依赖手动清理:
- 每次上线新版本或修改菜单配置(如
app/Admin/routes.php或数据库菜单表)后,在部署脚本中加入php artisan cache:clear - 若菜单数据来自数据库(如通过
Admin::menu()动态加载),可在菜单模型更新时主动调用Cache::forget('admin_menu')或使用带标签的缓存(如Cache::tags(['admin_menu'])->flush()) - 开发阶段可将
'menu' => ['cache' => env('ADMIN_MENU_CACHE', false)],并在.env中设ADMIN_MENU_CACHE=false,避免本地反复清理


















