Skip to content
全部文档

用户菜单

简介

用户菜单位于管理布局的右上角,可完全自定义。

每个菜单项由一个 action 表示,自定义方式相同。要注册新项,可将 actions 传给配置userMenuItems() 方法:

php
use App\Filament\Pages\Settings;
use Filament\Actions\Action;
use Filament\Panel;

public function panel(Panel $panel): Panel
{
    return $panel
        // ...
        ->userMenuItems([
            Action::make('settings')
                ->url(fn (): string => Settings::getUrl())
                ->icon('heroicon-o-cog-6-tooth'),
            // ...
        ]);
}
带有自定义菜单项的用户菜单带有自定义菜单项的用户菜单

对用户菜单项分组

默认情况下,所有用户菜单项渲染在同一个列表中。若要分成不同分组,可向 userMenuItems() 传入数组的数组。每个数组渲染为一组,组间以分隔线隔开:

php
use App\Filament\Pages\Billing;
use App\Filament\Pages\Settings;
use Filament\Actions\Action;
use Filament\Panel;

public function panel(Panel $panel): Panel
{
    return $panel
        // ...
        ->userMenuItems([
            [
                Action::make('settings')
                    ->url(fn (): string => Settings::getUrl())
                    ->icon('heroicon-o-cog-6-tooth'),
                Action::make('billing')
                    ->url(fn (): string => Billing::getUrl())
                    ->icon('heroicon-o-banknotes'),
            ],
            [
                Action::make('documentation')
                    ->url('https://filamentphp.com/docs')
                    ->icon('heroicon-o-book-open'),
            ],
        ]);
}
分成独立分组的用户菜单项分成独立分组的用户菜单项

INFO

默认情况下,logout 项会加到最后一组。若要自行放置,请在任意分组中用 logout 数组键显式注册。其默认 sort() 会把它放在所在组末尾;若要放在组内其他位置,请调整 sort:

php
->userMenuItems([
    // ...
    [
        'logout' => fn (Action $action): Action => $action->sort(2),
    ],
])

将用户菜单移到侧栏

默认情况下,用户菜单位于顶栏。若禁用顶栏,则会加到侧栏。

也可在配置中向 userMenu() 传入 position 参数,使其始终位于侧栏:

php
use Filament\Enums\UserMenuPosition;
use Filament\Panel;

public function panel(Panel $panel): Panel
{
    return $panel
        // ...
        ->userMenu(position: UserMenuPosition::Sidebar);
}
移到侧栏的用户菜单移到侧栏的用户菜单

要自定义用户菜单开头的个人资料链接,请用 profile 数组键注册新项,并传入一个自定义 action 对象的函数:

php
use Filament\Actions\Action;
use Filament\Panel;

public function panel(Panel $panel): Panel
{
    return $panel
        // ...
        ->userMenuItems([
            'profile' => fn (Action $action) => $action->label('Edit profile'),
            // ...
        ]);
}

关于创建个人资料页的更多信息,请参阅身份验证功能文档

要自定义用户菜单末尾的退出登录链接,请用 logout 数组键注册新项,并传入一个自定义 action 对象的函数:

php
use Filament\Actions\Action;
use Filament\Panel;

public function panel(Panel $panel): Panel
{
    return $panel
        // ...
        ->userMenuItems([
            'logout' => fn (Action $action) => $action->label('Log out'),
            // ...
        ]);
}

有条件地隐藏用户菜单项

也可用 visible()hidden() 方法有条件地隐藏用户菜单项,并传入要检查的条件。传入函数会将条件求值推迟到实际渲染菜单时:

php
use App\Models\Payment;
use Filament\Actions\Action;

Action::make('payments')
    ->visible(fn (): bool => auth()->user()->can('viewAny', Payment::class))
    // or
    ->hidden(fn (): bool => ! auth()->user()->can('viewAny', Payment::class))

从用户菜单项发送 POST HTTP 请求

可从用户菜单项发送 POST HTTP 请求:把 URL 传给 url(),并使用 postToUrl()

php
use Filament\Actions\Action;

Action::make('lockSession')
    ->url(fn (): string => route('lock-session'))
    ->postToUrl()

禁用用户菜单

可将 false 传给 userMenu() 以完全禁用用户菜单:

php
use Filament\Panel;

public function panel(Panel $panel): Panel
{
    return $panel
        // ...
        ->userMenu(false);
}