Кожен ресурс і сторінка автоматично з'являються в боковому меню панелі. Вигляд пункту налаштовують статичними властивостями й методами ресурсу.
use BackedEnum;
use Filament\Support\Icons\Heroicon;
use UnitEnum;
class OrderResource extends Resource
{
protected static string | BackedEnum | null $navigationIcon = Heroicon::OutlinedShoppingBag;
protected static string | UnitEnum | null $navigationGroup = 'Магазин';
protected static ?int $navigationSort = 2;
protected static ?string $navigationLabel = 'Замовлення';
public static function getNavigationBadge(): ?string
{
return (string) static::getModel()::where('status', 'new')->count();
}
public static function getNavigationBadgeColor(): ?string
{
return 'warning';
}
}
Що тут відбувається:
- іконка - у Filament 5 зручно брати з enum
Heroicon(автодоповнення замість рядків на кшталтheroicon-o-...); - група - пункти з однаковою групою збираються під спільним заголовком. Групу можна задати рядком або enum, щоб не дублювати назву в різних ресурсах;
- порядок -
$navigationSortу межах групи; - бейдж - число чи короткий текст біля пункту, наприклад кількість нових замовлень.
Пастки:
- бейдж рахується на кожному завантаженні будь-якої сторінки панелі. Важкий
count()по великій таблиці сповільнює всю адмінку. Для таких випадків - індекс під умову або кешування значення на хвилину; $shouldRegisterNavigation = falseховає пункт меню, але не забороняє доступ до сторінки за URL. Обмежувати доступ треба політиками чиcanAccess();- для великої панелі групи можна згорнути або винести частину ресурсів у кластер (
make:filament-cluster) - окремий розділ зі своєю піднавігацією.