You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Filament PHP中条件渲染默认后台导航链接?

在Filament PHP中实现Dashboard导航链接的条件渲染

下面提供几种不同场景下的实现方案,你可以根据自己使用的Filament版本和需求选择:

方案1:Filament v3+ 推荐使用导航构建器添加条件判断

在你的PanelProvider类(通常位于app/Providers/Filament目录)中,通过navigation()钩子控制导航项的显示:

use Filament\Panel;
use Filament\PanelProvider;
use Filament\Navigation\NavigationBuilder;
use Filament\Navigation\NavigationItem;

class AdminPanelProvider extends PanelProvider
{
    public function panel(Panel $panel): Panel
    {
        return $panel
            ->default()
            ->id('admin')
            ->path('admin')
            // 其他面板配置(如资源、插件等)
            ->navigation(function (NavigationBuilder $builder) {
                $navItems = $builder->items([
                    // 先定义其他固定导航项
                ]);

                // 这里添加你的条件逻辑,示例:判断用户是否拥有查看仪表盘权限
                if (auth()->user()?->can('view_admin_dashboard')) {
                    $navItems->push(
                        NavigationItem::make('Dashboard')
                            ->url('/admin')
                            ->icon('heroicon-o-home')
                            ->activeIcon('heroicon-s-home')
                            ->sort(1) // 控制导航项排序位置
                    );
                }

                return $navItems;
            });
    }
}

方案2:直接为导航项添加可见性条件

如果是在面板配置中直接声明导航项,可通过visible()方法传入条件闭包:

use Filament\Panel;
use Filament\PanelProvider;
use Filament\Navigation\NavigationItem;

class AdminPanelProvider extends PanelProvider
{
    public function panel(Panel $panel): Panel
    {
        return $panel
            ->default()
            ->id('admin')
            ->path('admin')
            // 其他面板配置
            ->navigationItems([
                NavigationItem::make('Dashboard')
                    ->url('/admin')
                    ->icon('heroicon-o-home')
                    ->activeIcon('heroicon-s-home')
                    ->sort(1)
                    // 自定义可见条件,示例:判断用户是否为管理员角色
                    ->visible(fn () => auth()->user()?->isAdmin()),
                // 其他导航项
            ]);
    }
}

方案3:Filament v2 版本适配方案

若你仍在使用Filament v2,可在navigation()回调中通过数组操作实现条件渲染:

use Filament\Panel;
use Filament\PanelProvider;

class AdminPanelProvider extends PanelProvider
{
    public function panel(Panel $panel): Panel
    {
        return $panel
            ->default()
            ->id('admin')
            ->path('admin')
            // 其他面板配置
            ->navigation(function (array $items) {
                // 条件判断,示例:仅登录用户可见
                if (auth()->check()) {
                    array_unshift($items, [
                        'label' => 'Dashboard',
                        'url' => '/admin',
                        'icon' => 'heroicon-o-home',
                        'sort' => 1,
                    ]);
                }

                return $items;
            });
    }
}

关键提示

  • 条件逻辑可根据实际需求调整,比如检查用户角色、特定权限、登录状态等。
  • 若使用Filament内置的Dashboard页面(而非自定义URL),可将NavigationItem::make()替换为Dashboard::make(),再添加visible()条件即可。

内容的提问来源于stack exchange,提问作者Alphy Gacheru

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.25 20:20:12