面板构建器 - 资源
展示记录
使用标签页过滤记录
你可以在表格上面添加标签页,使之基于预定义条件过滤记录。每个标签页以不同的方式设置表格的 Eloquent 查询范围。要注册标签页,在列表页类中添加 getTabs()
方法,并返回一个 Tab
对象数组:
use Filament\Resources\Components\Tab;use Illuminate\Database\Eloquent\Builder; public function getTabs(): array{ return [ 'all' => Tab::make(), 'active' => Tab::make() ->modifyQueryUsing(fn (Builder $query) => $query->where('active', true)), 'inactive' => Tab::make() ->modifyQueryUsing(fn (Builder $query) => $query->where('active', false)), ];}
自定义过滤器标签页标签
数组的键将用作选项卡的标识符,因此它们可以持久化在 URL 的查询字符串中。每个选项卡的标签也是由键生成的,但你可以通过将标签传递到选项卡的 make()
方法来覆盖它:
use Filament\Resources\Components\Tab;use Illuminate\Database\Eloquent\Builder; public function getTabs(): array{ return [ 'all' => Tab::make('All customers'), 'active' => Tab::make('Active customers') ->modifyQueryUsing(fn (Builder $query) => $query->where('active', true)), 'inactive' => Tab::make('Inactive customers') ->modifyQueryUsing(fn (Builder $query) => $query->where('active', false)), ];}
添加图标到过滤器标签页
你可以将图标传递到标签页的 icon
方法,将图标添加到标签页中:
use Filament\Resources\Components\Tab; Tab::make() ->icon('heroicon-m-user-group')
你也可以使用 iconPosition()
方法修改图标的位置,使其从标签前面移到标签后面:
use Filament\Support\Enums\IconPosition; Tab::make() ->icon('heroicon-m-user-group') ->iconPosition(IconPosition::After)
添加徽章到过滤器标签页
你可以将字符串传递给标签页的 badge()
方法,在标签页中添加徽章:
use Filament\Resources\Components\Tab; Tab::make() ->badge(Customer::query()->where('active', true)->count())
修改过滤器标签页徽章颜色
使用 badgeColor()
方法,可以修改徽章颜色:
use Filament\Resources\Components\Tab; Tab::make() ->badge(Customer::query()->where('active', true)->count()) ->badgeColor('success')
向过滤器选项卡添加额外属性
使用 extraAttributes()
,你可以将额外的 HTML 属性传递给过滤器选项卡:
use Filament\Resources\Components\Tab; Tab::make() ->extraAttributes(['data-cy' => 'statement-confirmed-tab'])
自定义默认标签页
要自定义页面加载时选中的默认标签页,你可以在 getDefaultActiveTab()
方法中,返回该标签页对应的数组键名:
use Filament\Resources\Components\Tab; public function getTabs(): array{ return [ 'all' => Tab::make(), 'active' => Tab::make(), 'inactive' => Tab::make(), ];} public function getDefaultActiveTab(): string | int | null{ return 'active';}
授权
关于授权,Filament 会监听所有应用中注册的模型策略。
如果模型策略的 viewAny()
方法返回 true
,则用户可以访问列表页。
reorder()
方法用于控制重排记录。
自定义表格 Eloquent 查询
尽管你可以为整个资源自定义 Eloquent 查询,你也可以为列表页表格进行特定修改。为此,请在资源的 table()
方法中使用 modifyQueryUsing()
方法:
use Filament\Tables\Table;use Illuminate\Database\Eloquent\Builder; public static function table(Table $table): Table{ return $table ->modifyQueryUsing(fn (Builder $query) => $query->withoutGlobalScopes());}
自定义列表页视图
要进一步自定义,你可以重写页面类的静态 $view
属性:
protected static string $view = 'filament.resources.users.pages.list-users';
这假定了你已经创建了一个视图文件 resources/views/filament/resources/users/pages/list-users.blade.php
。
下例是视图可能包含内容的简单示例:
<x-filament-panels::page> {{ $this->table }}</x-filament-panels::page>
要查看默认视图中包含的内容,你可以查看项目的 vendor/filament/filament/resources/views/resources/pages/list-records.blade.php
文件。
Still need help? Join our Discord community or open a GitHub discussion