列表展示页
表格字段
$table->columns()
方法用来定义表格中的字段。他是一个 column 对象的数组,按照展示的顺序在表格中排序。
可用的字段包括:
你也可以创建自己的完全自定义表格字段.
设置默认排序字段
如果数据列是 sortable()
可排序的,你可以使用 $table->defaultSort()
方法指定其为默认排序字段:
use Filament\Resources\Table;
use Filament\Tables;
public static function table(Table $table): Table
{
return $table
->columns([
Tables\Columns\TextColumn::make('name')->sortable(),
// ...
])
->defaultSort('name');
}
过滤器
过滤器预定义了查询范围,用于在表格中过滤数据。$table->filters()
方法用于注册这些过滤器。
将过滤器显示在表格内容的上面或下面
如果想在表格内容的上面启用过滤器,代替原有弹窗方式,你可以使用:
use Filament\Tables\Filters\Layout;
use Filament\Resources\Table;
public static function table(Table $table): Table
{
return $table
->columns([
// ...
])
->filters(
[
// ...
],
layout: Layout::AboveContent,
);
}
如果想在表格内容的下面启用过滤器,代替原有弹窗方式,你可以使用:
use Filament\Tables\Filters\Layout;
use Filament\Resources\Table;
public static function table(Table $table): Table
{
return $table
->columns([
// ...
])
->filters(
[
// ...
],
layout: Layout::BelowContent,
);
}
操作
操作Actions是在表格的每一行末尾进行渲染的按钮,用户可以借以在表格中实现任务。要了解怎么创建操作,请查看操作文档。
要在表格中添加操作,使用 $table->actions()
方法:
use Filament\Resources\Table;
use Filament\Tables;
public static function table(Table $table): Table
{
return $table
->columns([
// ...
])
->actions([
//...
Tables\Actions\Action::make('activate')
->action(fn (Post $record) => $record->activate())
->requiresConfirmation()
->color('success'),
]);
}
操作分组
你可以使用 ActionGroup
对象,将多个表格操作分组归入一个下拉按钮中:
use Filament\Resources\Table;
use Filament\Tables;
public static function table(Table $table): Table
{
return $table
->columns([
// ...
])
->actions([
Tables\Actions\ActionGroup::make([
Tables\Actions\ViewAction::make(),
Tables\Actions\EditAction::make(),
Tables\Actions\DeleteAction::make(),
]),
]);
}
批量操作
批量操作 是表格头部渲染的下拉按钮。当选中表格记录前的复选框时显现。让用户可以在表格中一次性操作多条记录执行任务。要了解怎么实现批量操作,请查看操作文档。
要在“批量删除”按钮之前添加批量操作,可以使用 $table->prependBulkActions()
方法:
use Filament\Resources\Table;
use Filament\Tables;
use Illuminate\Database\Eloquent\Collection;
public static function table(Table $table): Table
{
return $table
->columns([
// ...
])
->prependBulkActions([
Tables\Actions\BulkAction::make('activate')
->action(fn (Collection $records) => $records->each->activate())
->requiresConfirmation()
->color('success')
->icon('heroicon-o-check'),
]);
}
记录选择框位置
默认情况下,记录的复选框在行首渲染。你可以将其移到行尾:
use Filament\Resources\Table;
use Filament\Tables\Actions\RecordCheckboxPosition;
public static function table(Table $table): Table
{
return $table
->recordCheckboxPosition(RecordCheckboxPosition::AfterCells)
->columns([
// ...
])
->bulkActions([
// ...
]);
}
排序记录
你可以使用 reorderable()
方法,让用户可以在表格中使用拖拽重新排序记录:
use Filament\Resources\Table;
public static function table(Table $table): Table
{
return $table
// ...
->reorderable('sort');
}
如果你在模型中使用了批量赋值保护,你需要将 sort
属性也添加到 $fillable
数组中。
当表格可重新排序,表格中会有一个新的按钮来开关重新排序。排序模式下,分页功能会被禁用,让你可以在不同页面间移动记录。
reorderable()
方法中传入用来保存排序的字段名。比如像 spatie/eloquent-sortable
使用 order_column
作为排序字段,你可以将其传入 reorderable()
中:
use Filament\Resources\Table;
public static function table(Table $table): Table
{
return $table
// ...
->reorderable('order_column');
}
轮询内容
使用 poll()
方法,你可以轮询表格内容使之在指定的时间间隔内刷新内容:
use Filament\Resources\Table;
public static function table(Table $table): Table
{
return $table
// ...
->poll('10s');
}
授权
关于授权,Filament 会监听在所有应用中注册过的模型策略。
如果模型政策中的 viewAny()
返回的是 true
,用户可以访问列表页。
如果 deleteAny()
方法返回 true
,用户可以批量删除记录。Filament 使用 deleteAny()
方法因为通过迭代检查 delete()
策略性能不是很好。
自定义Eloquent查询
虽然你可以为整个资源自定义 Eloquent 查询,你可能还会想对列表页表格做一些特定的修改。在页面类中重写 getTableQuery()
方法,可以实现:
protected function getTableQuery(): Builder
{
return parent::getTableQuery()->withoutGlobalScopes();
}
自定义查询字符串
表格搜索、过滤、排序和其他状态属性以查询字符串的形式存在 URL 中。因为 Filament 内部使用 Livewire,该行为可以通过重写资源列表页的 $queryString
属性来修改。比如你可以使用 as
通过查询字符串别名,来重命名一些属性:
protected $queryString = [
'isTableReordering' => ['except' => false],
'tableFilters' => ['as' => 'filters'], // `tableFilters` is now replaced with `filters` in the query string
'tableSortColumn' => ['except' => ''],
'tableSortDirection' => ['except' => ''],
'tableSearchQuery' => ['except' => '', 'as' => 'search'], // `tableSearchQuery` is now replaced with `search` in the query string
];
自定义视图
要进一步自定义,你可以覆盖页面类的静态 $view
属性:
protected static string $view = 'filament.resources.users.pages.list-users';