Export action
概述
Filament v3.2 引入了一个预构建的 Action,可以将行导出到 CSV 或 XLSX 文件。当单击触发器按钮时,模态框会询问要导出的列以及它们应该的标签。此功能使用作业批次和数据库迁移,因此你需要从 Laravel 发布这些迁移。此外,你还需要发布 Filament 用于存储导出信息的表的迁移:
php artisan queue:batches-table
php artisan notifications:table
php artisan vendor:publish --tag=filament-actions-migrations
php artisan migrate
如果你使用 PostgreSQL,请确保通知迁移的
data
字段使用json()
:$table->json('data')
。
如果在
User
模型中使用 UUID,请确保通知迁移中的notifiable
字段使用uuidMorphs()
:$table->uuidMorphs('notifiable')
。
你可以这样使用 ExportAction
:
use App\Filament\Exports\ProductExporter;
use Filament\Actions\ExportAction;
ExportAction::make()
->exporter(ProductExporter::class)
如果要将 Action 添加到表格头部,可以使用 Filament\Tables\Actions\ExportAction
:
use App\Filament\Exports\ProductExporter;
use Filament\Tables\Actions\ExportAction;
use Filament\Tables\Table;
public function table(Table $table): Table
{
return $table
->headerActions([
ExportAction::make()
->exporter(ProductExporter::class)
]);
}
或者如果你想将其添加为表格的批量操作,使得用户可以选择导出那些行,可以使用 Filament\Tables\Actions\ExportBulkAction
:
use App\Filament\Exports\ProductExporter;
use Filament\Tables\Actions\ExportBulkAction;
use Filament\Tables\Table;
public function table(Table $table): Table
{
return $table
->bulkActions([
ExportBulkAction::make()
->exporter(ProductExporter::class)
]);
}
需要创建 "exporter" 类以告知 Filament 如何导出每一行。
创建导出器
要为模型创建 exporter 类,可以使用 make:filament exporter
命令,传入模型名称:
php artisan make:filament-exporter Product
这将会在 app/Filament/Exports
目录中创建一个新类。现在你需要到定义可以导出的列字段。
自动生成导出列
如果你想要节省时间,Filament 可以使用 --generate
基于模型数据库字段自动生成列字段:
php artisan make:filament-exporter Product --generate
定义导出列
要定义导出的列,你需要在导出器类中重写 getColumns()
方法,使之返回 ExportColumn
对象数组:
use Filament\Actions\Exports\ExportColumn;
public function getColumns(): array
{
return [
ExportColumn::make('name'),
ExportColumn::make('sku')
->label('SKU'),
ExportColumn::make('price'),
];
}
自定义导出列标签
每个列的标签将根据其名称自动生成,但你可以通过调用 label()
方法来覆盖它:
use Filament\Actions\Exports\ExportColumn;
ExportColumn::make('sku')
->label('SKU')