操作
开始
单一操作
单一操作按钮在每一个表格行的最后进行渲染。
如果你在 Livewire 组件中使用操作,你可以将他们放到 getTableActions() 方法中。
protected function getTableActions(): array
{
return [
// ...
];
}
如果你在后台面板的资源或者关系管理器中使用,你应该将它们放在 $table 上:
public static function table(Table $table): Table
{
return $table
->actions([
// ...
]);
}
操作可以使用静态方法 make() 传入名字作为参数创建。操作名必须是唯一的。你可以将一个执行任务的回调函数作为参数传入到 action() 中,或者将一个生成URL的回调函数作为参数传给 url():
如果你想在新的标签页中打开URL,你可以使用
openUrlInNewTab()方法。
use App\Models\Post;
use Filament\Tables\Actions\Action;
Action::make('edit')
->url(fn (Post $record): string => route('posts.edit', $record))
批量操作
当用户选择至少一个记录时,批量操作(Bulk Action)按钮变为可见。
如果你在 Livewire 组件中使用操作,你可以将其放在 getTableBulkActions() 中。
protected function getTableBulkActions(): array
{
return [
// ...
];
}
如果你在后台面板的资源或者关系管理器中使用,你必须将它们放到 $table 上:
public static function table(Table $table): Table
{
return $table
->bulkActions([
// ...
]);
}
批量操作使用静态 make() 方法,传入操作名称创建。操作名应该是唯一的。你可以传入一个回调到 action() 中去执行任务:
use Filament\Tables\Actions\BulkAction;
use Illuminate\Database\Eloquent\Collection;
BulkAction::make('delete')
->action(fn (Collection $records) => $records->each->delete())
使用 deselectRecordAfterCompletion() 方法,可以在批量操作执行之后取消选择记录:
use Filament\Tables\Actions\BulkAction;
use Illuminate\Database\Eloquent\Collection;
BulkAction::make('delete')
->action(fn (Collection $records) => $records->each->delete())
->deselectRecordsAfterCompletion()
设置标签
默认情况下,操作的标签是由操作名称生成。你可以使用 label() 方法自定义:
use App\Models\Post;
use Filament\Tables\Actions\Action;
Action::make('edit')
->label('Edit post')
->url(fn (Post $record): string => route('posts.edit', $record))
另外,你可以使用 translateLabel() 方法自动获取翻译标签:
use App\Models\Post;
use Filament\Tables\Actions\Action;
Action::make('edit')
->translateLabel() // 相当于 `label(__('Edit'))`
->url(fn (Post $record): string => route('posts.edit', $record))
设置颜色
操作可以有颜色指示其意义。可以说 primary、secondary、success、warning 或 danger:
use Filament\Tables\Actions\BulkAction;
use Illuminate\Database\Eloquent\Collection;
BulkAction::make('delete')
->action(fn (Collection $records) => $records->each->delete())
->deselectRecordsAfterCompletion()
->color('danger')