在 laravel-admin 中,可通过配置 config/admin.php 的 'top_nav' => true 和 'top_nav_links' 数组新增顶部导航菜单项,支持图标、url、权限控制及动态下拉菜单,修改后需执行 php artisan config:clear 清除缓存。

在 Laravel-admin 中,顶部导航菜单(即顶部横栏)默认只显示“首页”和“用户管理”等基础入口,如需新增自定义项(比如“系统设置”“数据看板”“帮助中心”),无需修改 vendor 源码,只需通过配置文件 + 路由注册即可完成。关键在于区分顶部导航与左侧菜单:顶部导航是全局固定栏,由 config/admin.php 中的 'top_nav' => true 开启,并通过 menu.php 配置具体条目。
启用顶部导航并确认基础配置
打开 config/admin.php,确保以下两项已正确设置:
-
'top_nav' => true—— 启用顶部导航栏(默认为 false) -
'top_nav_links' => []—— 这是顶部菜单的数据源,留空则不显示任何自定义项;填入关联数组即可渲染链接
该配置项支持图标、文字、URL 和权限控制,例如:
(直接写在 config/admin.php 的对应位置)'top_nav_links' => [
['label' => '数据看板', 'url' => '/admin/dashboard', 'icon' => 'fa-tachometer'],
['label' => 'API 文档', 'url' => 'https://api.example.com/docs', 'icon' => 'fa-book', 'target' => '_blank'],
],
添加带权限控制的顶部菜单项
若某项仅对特定角色可见(如“系统日志”只给管理员),不能仅靠前端隐藏,需结合权限判断。推荐方式是在 config/admin.php 中使用闭包动态生成:
- 闭包内可调用
Admin::user()获取当前登录用户 - 用
$user->can('view-system-logs')判断权限(需提前在权限表中定义) - 返回数组或空数组,实现按需显示
示例:
'top_nav_links' => function () {
$user = \Encore\Admin\Facades\Admin::user();
$links = [['label' => '首页', 'url' => '/admin/']];
if ($user->isAdministrator()) {
$links[] = ['label' => '系统日志', 'url' => '/admin/logs', 'icon' => 'fa-file-text'];
}
return $links;
},
添加带下拉子菜单的顶部入口
Laravel-admin 原生不支持顶部下拉菜单,但可通过注入 HTML + 少量 JS 实现。核心思路是:在 top_nav_links 中插入一个带 dropdown 类的 <li>,再用 Blade 视图或 Admin 的 Admin::js() 补充交互逻辑。
- 先在
config/admin.php中加入一个占位项,label 设为Html::raw('系统 <i class="fa fa-angle-down"></i>') - 在
app/Admin/bootstrap.php末尾添加 JS,监听点击并展开自定义下拉层 - 下拉内容建议用
Admin::html()或独立 Blade 片段渲染,避免硬编码 URL
注意:此方式需自行维护样式兼容性,适用于少量高频功能入口,不建议替代左侧菜单做复杂导航。
刷新缓存并验证效果
修改配置后不会自动生效,必须清除 Laravel 配置缓存:
- 执行
php artisan config:clear - 如使用 OPcache,还需重启 PHP-FPM 或执行
opcache_reset() - 访问后台任意页面,检查顶部是否出现新菜单项;右键检查元素确认 HTML 结构正确
若未显示,请确认 top_nav 为 true、top_nav_links 数组格式无语法错误、且无 JS 报错阻断渲染。











