列表展示页

Resources

表格字段

$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'),
]);
}

在模态框中新建记录

如果是简单资源,你可能倾向于在模态框中新建记录,而不是跑到新建页面中实现。

如果你建立了模态框资源,你就已经可以实现了。不过,如果你有一个普通资源也想通过模态框创建资源,请删除资源的新建页

保存前自定义数据

有时,你可能希望在保存到数据库之前修改表单数据。可以使用 mutateFormDataUsing() 方法,该方法解释 $data 作为数组,返回修改后的版本:

use Filament\Tables\Actions\CreateAction;
 
CreateAction::make()
->mutateFormDataUsing(function (array $data): array {
$data['user_id'] = auth()->id();
 
return $data;
})

自定义新建处理过程

你可以使用 process() 方法微调记录的创建过程:

use Filament\Tables\Actions\CreateAction;
use Illuminate\Database\Eloquent\Model;
 
CreateAction::make()
->process(function (array $data): Model {
return static::getModel()::create($data);
})

自定义保存通知

当记录成功创建,会发送通知给用户,告知操作成功。

要自定义通知内容:

use Filament\Tables\Actions\CreateAction;
 
CreateAction::make()
->successNotificationMessage('User registered')

要完全禁用通知:

use Filament\Tables\Actions\CreateAction;
 
CreateAction::make()
->successNotificationMessage(null)

生命周期钩子

在操作生命周期的各个结点,钩子可用于执行代码。

use Filament\Tables\Actions\CreateAction;
 
CreateAction::make()
->beforeFormFilled(function () {
// Runs before the form fields are populated with their default values.
})
->afterFormFilled(function () {
// Runs after the form fields are populated with their default values.
})
->beforeFormValidated(function () {
// Runs before the form fields are validated when the form is submitted.
})
->afterFormValidated(function () {
// Runs after the form fields are validated when the form is submitted.
})
->before(function () {
// Runs before the form fields are saved to the database.
})
->after(function () {
// Runs after the form fields are saved to the database.
})

在模态框中编辑记录

如果你用的是简单资源,你可能倾向于在模态框中编辑记录,而不用跑到编辑页面中操作。

如果你建立了模态框资源,你就已经可以实现了。不过,如果你有一个普通资源也想通过模态框编辑资源,请删除资源的编辑页

在填充表单前自定义数据

你可能需要在数据填充到表单之前修改数据。你可以使用 mutateRecordDataUsing() 方法修改 $data 数组,在填充到表单之前返回修改后的数据:

use Filament\Tables\Actions\EditAction;
 
EditAction::make()
->mutateRecordDataUsing(function (array $data): array {
$data['user_id'] = auth()->id();
 
return $data;
})

保存前自定义数据

有时,你可能希望在保存到数据库之前修改表单数据。可以使用 mutateFormDataUsing() 方法,该方法解释 $data 作为数组,返回修改后的版本:

use Filament\Tables\Actions\EditAction;
 
EditAction::make()
->mutateFormDataUsing(function (array $data): array {
$data['last_edited_by_id'] = auth()->id();
 
return $data;
})

自定义保存处理过程

你可以使用 process() 方法微调记录的更新过程:

use Filament\Tables\Actions\EditAction;
use Illuminate\Database\Eloquent\Model;
 
EditAction::make()
->process(function (Model $record, array $data): Model {
$record->update($data);
 
return $record;
})

自定义保存通知

当记录成功更新,会发送通知给用户,告知操作成功。

要自定义通知内容:

use Filament\Tables\Actions\EditAction;
 
EditAction::make()
->successNotificationMessage('User updated')

如果要完全禁用通知:

use Filament\Tables\Actions\EditAction;
 
EditAction::make()
->successNotificationMessage(null)

生命周期钩子

在操作生命周期的各个结点,钩子可用于执行代码。

use Filament\Tables\Actions\EditAction;
 
EditAction::make()
->beforeFormFilled(function () {
// Runs before the form fields are populated from the database.
})
->afterFormFilled(function () {
// Runs after the form fields are populated from the database.
})
->beforeFormValidated(function () {
// Runs before the form fields are validated when the form is saved.
})
->afterFormValidated(function () {
// Runs after the form fields are validated when the form is saved.
})
->before(function () {
// Runs before the form fields are saved to the database.
})
->after(function () {
// Runs after the form fields are saved to the database.
})

在模态框中查看记录

如果是简单资源,你可能希望在模态框中查看记录,而不用跑到查看页面。假如是这样,你可以直接删除查看页面

如果你的资源中没有 ViewAction ,可以在 $table->actions() 数组中添加一个:

use Filament\Resources\Table;
use Filament\Tables;
 
public static function table(Table $table): Table
{
return $table
->columns([
// ...
])
->actions([
Tables\Actions\ViewAction::make(),
// ...
]);
}

删除记录

默认情况下,你可以在表格中批量删除记录。你也可以使用[DeleteAction]删除单条记录。

use Filament\Resources\Table;
use Filament\Tables;
 
public static function table(Table $table): Table
{
return $table
->columns([
// ...
])
->actions([
// ...
Tables\Actions\DeleteAction::make(),
]);
}

排序记录

你可以使用 reorderable() 方法,让用户可以在表格中使用拖拽重新排序记录:

use Filament\Resources\Table;
 
public static function table(Table $table): Table
{
return $table
// ...
->reorderable('sort');
}

当表格可重新排序,表格中会有一个新的按钮来开关重新排序。排序模式下,分页功能会被禁用,让你可以在不同页面间移动记录。

reorderable() 方法中传入用来保存排序的字段名。比如像 spatie/eloquent-sortable 使用 order_column 作为排序字段,你可以将其传入 orderable() 中:

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();
}

自定义视图

要进一步自定义,你可以覆盖页面类的静态 $view 属性:

protected static string $view = 'filament.resources.users.pages.list-users';

需要帮助? 加入论坛 或者打开 GitHub讨论

喜欢Filament?

Filament 中文文档由 laravel-filament.cn 翻译整理。站长用爱发电,希望为英文阅读不畅的朋友提供快速掌握Filament框架的途径。文档的翻译,社区的运营维护都需要时间精力上的付出。如果文档社区使你受益,如果你想支持站长...

打赏