timsinakiran / filament-import
基于 konnco/filament-import,支持 Laravel 11,因为 Filament 3 默认导入器对基本用例来说毫无意义。
1.1
2024-08-15 05:59 UTC
Requires
- php: ^8.0
- filament/filament: ^3.2
- filament/notifications: ^3.0
- illuminate/contracts: ^10|^11
- illuminate/support: ^10|^11
- livewire/livewire: ^3
- maatwebsite/excel: ^3
- psr/simple-cache: ^2.0|^3.0
- spatie/laravel-package-tools: ^1.0
Requires (Dev)
- larastan/larastan: *
- laravel/pint: ^1.0
- nunomaduro/collision: ^6.4|^7.0|^8.0
- orchestra/testbench: ^8.0
- pestphp/pest: ^2
- pestphp/pest-plugin-laravel: ^2.0
- pestphp/pest-plugin-livewire: ^2.0
- phpstan/extension-installer: ^1.0
- phpstan/phpstan-deprecation-rules: ^1.0
- phpstan/phpstan-phpunit: ^1
- phpunit/phpunit: ^9.0|^10.0|^11.0
This package is not auto-updated.
Last update: 2024-09-23 08:26:41 UTC
README
此包将使您轻松地从文件导入到模型,无需进行模板操作。
您只需拖放并匹配文件的字段和列,让魔法发生!
安装
您可以通过 composer 安装此包
composer require timsinakiran/filament-import
发布配置
如果您想手动进行设置,请发布现有配置。
php artisan vendor:publish --tag=filament-import-config
使用方法
将操作导入到 ListRecords
页面
use Konnco\FilamentImport\Actions\ImportAction; use Konnco\FilamentImport\Actions\ImportField; class ListCredentialDatabases extends ListRecords { protected static string $resource = CredentialDatabaseResource::class; protected function getActions(): array { return [ ImportAction::make() ->fields([ ImportField::make('project') ->label('Project') ->helperText('Define as project helper'), ImportField::make('manager') ->label('Manager'), ]) ]; } }
所需字段
protected function getActions(): array { return [ ImportAction::make() ->fields([ ImportField::make('project') ->label('Project') ->required(), ]) ]; }
禁用批量创建
如果您仍然想坚持使用事件模型,可能需要此功能并关闭批量创建
protected function getActions(): array { return [ ImportAction::make() ->massCreate(false) ->fields([ ImportField::make('project') ->label('Project') ->required(), ]) ]; }
过滤空白行
如果您有一个包含空白数据的电子表格 点击这里查看更多,您可以过滤掉这些行
protected function getActions(): array { return [ ImportAction::make() ->handleBlankRows(true) ->fields([ ImportField::make('project') ->label('Project') ->required(), ]) ]; }
字段数据变异
您还可以在保存到模型之前从行电子表格中操作数据
protected function getActions(): array { return [ ImportAction::make() ->fields([ ImportField::make('project') ->label('Project') ->mutateBeforeCreate(fn($value) => Str::of($value)->camelCase()) ->required(), ]) ]; }
否则,您可以在数据插入数据库之前从字段操作数据并获取所有变异数据。
protected function getActions(): array { return [ ImportAction::make() ->fields([ ImportField::make('email') ->label('Email') ->required(), ])->mutateBeforeCreate(function($row){ $row['password'] = bcrypt($row['email']); return $row; }) ]; }
还可以在数据插入数据库后操作数据
use Illuminate\Database\Eloquent\Model; protected function getActions(): array { return [ ImportAction::make() ->fields([ ImportField::make('email') ->label('Email') ->required(), ])->mutateAfterCreate(function(Model $model, $row){ // do something with the model return $model; }) ]; }
网格列
当然,您可以分割列网格以美化数据地图的外观
protected function getActions(): array { return [ ImportAction::make() ->fields([ ImportField::make('project') ->label('Project') ->required(), ], columns:2) ]; }
JSON格式字段
我们还支持 JSON 格式字段,您可以在调用 make
函数时设置,并使用点注释分隔名称
protected function getActions(): array { return [ ImportAction::make() ->fields([ ImportField::make('project.en') ->label('Project In English') ->required(), ImportField::make('project.id') ->label('Project in Indonesia') ->required(), ], columns:2) ]; }
静态字段数据
对于静态字段数据,您可以使用 Filament 的常用字段
use Filament\Forms\Components\Select; protected function getActions(): array { return [ ImportAction::make() ->fields([ ImportField::make('name') ->label('Project') ->required(), Select::make('status') ->options([ 'draft' => 'Draft', 'reviewing' => 'Reviewing', 'published' => 'Published', ]) ], columns:2) ]; }
唯一字段
如果您的模型应该是唯一的,您可以传递字段的名称,该字段将用于检查数据库中是否已存在该行。如果存在,则跳过该行(防止出现非唯一行的错误)
use Filament\Forms\Components\Select; protected function getActions(): array { return [ ImportAction::make() ->uniqueField('email') ->fields([ ImportField::make('email') ->label('Email') ->required(), ], columns:2) ]; }
验证
您可以对导入字段进行验证,有关可用验证的更多信息,请参阅 Laravel 文档
use Filament\Forms\Components\Select; protected function getActions(): array { return [ ImportAction::make() ->fields([ ImportField::make('name') ->label('Project') ->rules('required|min:10|max:255'), ], columns:2) ]; }
创建记录
您可以通过使用 handleRecordCreation
函数覆盖默认的记录创建闭包并放置自己的代码
use Filament\Forms\Components\Select; protected function getActions(): array { return [ ImportAction::make() ->fields([ ImportField::make('name') ->label('Project') ->rules('required|min:10|max:255'), ], columns:2) ->handleRecordCreation(function($data){ return Post::create($data); }) ]; }
测试
composer test
变更日志
请参阅 变更日志 了解最近更改的详细信息。
贡献
请参阅 贡献指南 了解详细信息。
安全漏洞
请审查 我们的安全策略 了解如何报告安全漏洞。