导航
概述
默认情况下,Filament 会为每一个 资源类、自定义页面 和 Clusters 注册导航菜单。这些类中包含一些你可以重写的静态属性和静态方法,用以配置导航菜单和显示顺序:
如果 想在应用中添加一层导航,可以使用 Clusters。这对于资源和页面分组很有用。
自定义导航项标签
默认情况下,导航标签由资源或者页面的名字生成,你可以使用 $navigationItems 属性自定义该标签:
protected static ?string $navigationLabel = 'Custom Navigation Label';
此外,你也可以重写 $getNavigationLabel() 方法:
public static function getNavigationLabel(): string
{
    return 'Custom Navigation Label';
}
自定义导航项图标
你可以重写资源和页面类页面中的 $navigationIcon 属性,自读八卦图导航菜单项的图标:
protected static ?string $navigationIcon = 'heroicon-o-document-text';
如果你在同一个导航组内的所有项目都设置了 $navigationIcon = null,这些项目将会通过分组标签下方的竖条(vertical bar)连接。
激活时切换导航菜单图标
使用 $activeNavigationIcon 属性,可以分配一个仅用于激活项的导航图标:
protected static ?string $activeNavigationIcon = 'heroicon-o-document-text';
导航项排序
默认情况下,导航项按照字母顺序排序,你可以使用 $navigationSort 属性自定义排序:
protected static ?int $navigationSort = 3;
c```
限制,使用低数值导航项会出现在高数值的前面 - 排序是升序的。
## 添加  徽章到导航项
要在导航菜单项中添加徽章,可以使用 `getNavigaionBadge()` 方法,返回徽章内容:
```php
public static function getNavigationBadge(): ?string
{
    return static::getModel()::count();
}
如果 徽章值是由 getNavigationBadge() 返回,它将默认使用 primary 颜色展示。要自定义徽章上下文样式,请在  getNavigationBadgeColor() 方法中返回 danger、gray、info、primary、success 或 warning:
public static function getNavigationBadgeColor(): ?string
{
    return static::getModel()::count() > 10 ? 'warning' : 'primary';
}
导航徽章的自定义 tooltip 可以在 $navigationBadgeTooltip 中设置:
protected static ?string $navigationBadgeTooltip = 'The number of users';
或者从 getNavigationBadgeTooltip() 中返回:
public static function getNavigationBadgeTooltip(): ?string
{
    return 'The number of users';
}
导航项分组
你可以通过指定资源类resources 和 自定义页面的 $navigationGroup 属性对导航菜单项进行分组:
protected static ?string $navigationGroup = 'Settings';
在同一个导航分组中的所有菜单项会被集中到同一个分组标签下显示,比如本例的 "Settings"。未分组的菜单项会被保留在侧边栏顶部。
将导航项分组到其他项目之下
将父级项目的标签传递给 $navigationParentItem,你可以将导航项作为其他项的子项分组:
protected static ?string $navigationParentItem = 'Notifications';
protected static ?string $navigationGroup = 'Settings';
也可以使用 getNavigationParentItem() 方法设置动态的父级项目标签:
public static function getNavigationParentItem(): ?string
{
    return __('filament/navigation.groups.settings.items.notifications');
}
如上所见,如果父级项目有一个导航主,导航组也必须定义,这样才能识别正确的父级项目。
如果有三级导航,你应该考虑使用 Cluster,这是资源和自定义页面的逻辑分组,可以共享自己单独的导航。
自定义导航分组
你可以在配置中调用 navigationGroups(),并按顺序传入 NavigationGroup 对象来自定义导航分组:
use Filament\Navigation\NavigationGroup;
use Filament\Panel;
public function panel(Panel $panel): Panel
{
    return $panel
        // ...
        ->navigationGroups([
            NavigationGroup::make()
                 ->label('Shop')
                 ->icon('heroicon-o-shopping-cart'),
            NavigationGroup::make()
                ->label('Blog')
                ->icon('heroicon-o-pencil'),
            NavigationGroup::make()
                ->label('Settings')
                ->icon('heroicon-o-cog-6-tooth')
                ->collapsed(),
        ]);
}
本例中,我会传入了自定义的图标 icon(),并使其中一个默认是折叠的 collapsed()。