展示记录
使用标签页过滤记录
你可以在表格上面添加标签页,使之基于预定义条件过滤记录。每个标签页以不同的方式设置表格的 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')
自定义默认标签页
要自定义页面加载时选中的默认标签页,你可以在 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 文件。