okeonline / filament-archivable
一个用于使用可存档模型的丝印插件
Requires
- php: ^8.3
- filament/filament: ^3.2
- illuminate/contracts: ^10.0||^11.0
- illuminate/database: ^11.0
- illuminate/support: ^11.0
- joelbutcher/laravel-archivable: ^1.4
- spatie/laravel-package-tools: ^1.16
Requires (Dev)
- filament/tables: ^3.2.57
- laravel/pint: ^1.14
- nunomaduro/collision: ^8.1.1||^7.10.0
- orchestra/testbench: ^9.0.0||^8.22.0
- pestphp/pest: ^2.34
- pestphp/pest-plugin-arch: ^2.7
- pestphp/pest-plugin-laravel: ^2.3
- pestphp/pest-plugin-livewire: ^2.1
- pestphp/pest-plugin-watch: ^2.1
README
用于存档、解存档和筛选记录的丝印插件
基于 Joe Butcher 的 Laravel Archivable 包的存档和未存档表记录(eloquent 模型)的 Filament 插件。
此 Filament 插件为您的资源表添加了 ArchiveAction、UnArchiveAction 和 ArchivedFilter。还可以 为存档记录添加自定义行类。除了表操作外,该包还提供页面操作,用于存档和解存档记录。
要求
- PHP ^8.3
- Laravel ^11.0
- Filament ^3.0
- Laravel Archivable ^1.4(与插件一起安装)
安装
您可以通过 composer 安装此包
composer require okeonline/filament-archivable
然后,将插件添加到 AppPanelProvider
class AppPanelProvider extends PanelProvider { public function panel(Panel $panel): Panel { return $panel // ... ->plugin(\Okeonline\FilamentArchivable\FilamentArchivablePlugin::make()); } }
此 Filament 插件会自动安装 Joe Butcher 的 Laravel Archivable 包。
请按照他的安装说明进行操作,简要来说,需要
- 在您的表中添加一个
archived_at
列 - 在您的模型上使用
Archivable
-特质
用法
存档和解存档表操作
一旦将 Laravel Archivable 包 的 Archivable
-特质添加到模型中,就可以将以下操作添加到相应的资源表
use Okeonline\FilamentArchivable\Tables\Actions\ArchiveAction; use Okeonline\FilamentArchivable\Tables\Actions\UnArchiveAction; // ... class UserResource extends Resource { // ... public static function table(Table $table): Table { return $table // ... ->actions([ ArchiveAction::make(), UnArchiveAction::make(), ]); } }
它将在未存档的记录上显示 ArchiveAction
,并在当前已存档的记录上显示 UnArchiveAction
您应该将 两个 操作都添加到同一个表中。操作本身将决定是否在记录上显示。
这些操作是正常的 表 操作,类似于 FilamentPHP 的 删除 和 还原 表操作。您可以将 FilamentPHP 表操作文档 中描述的所有功能添加到操作中,如
hiddenLabel()
tooltip()
disabled()
icon()
- ...等等。
ArchiveAction::make() ->hiddenLabel() ->tooltip('Archive'),
表操作调用由 Laravel Achivable 包 提供的 $model->archive()
和 $model->unArchive()
方法。
存档和解存档页面操作
一旦将 Laravel Archivable 包 的 Archivable
-特质添加到模型中,就可以将以下操作添加到资源 页面
// in e.g. Filament/PostResource/EditPage.php use Okeonline\FilamentArchivable\Actions\ArchiveAction; use Okeonline\FilamentArchivable\Actions\UnArchiveAction; // ... protected function getHeaderActions(): array { return [ ArchiveAction::make(), UnArchiveAction::make(), ]; }
它将在未存档的记录上显示 ArchiveAction
,并在当前已存档的记录上显示 UnArchiveAction
请注意,表操作和正常(页面)操作之间存在区别。您不能将页面操作用作表操作,反之亦然。尽管如此,业务逻辑是相同的。阅读此页面获取更多关于区别的信息。
您应该将这两个操作添加到同一页面。动作本身将决定是否在记录上显示。如果您想编辑(并取消存档)正在存档的记录,请查看此内容。
这些操作是常规操作,类似于 FilamentPHP 的 删除 和 恢复 操作。您可以添加 FilamentPHP 操作文档中描述的所有功能,例如
color()
size()
disabled()
icon()
- ...等等。
use Filament\Support\Enums\ActionSize; ArchiveAction::make() ->color('success') ->size(ActionSize::Large),
过滤
还可以向资源表添加 ArchivedFilter
,它将添加三个过滤选项
- 仅显示未存档的记录
- 仅显示存档的记录
- 显示两者
默认情况下,未过滤的表只会显示未存档的记录,因为 Laravel Archivable 包附带了一个默认的全局范围来查询具有
archived_at IS NULL
的记录
您可以通过将 ArchivedFilter
添加到资源表过滤器数组中来添加此过滤器
use Okeonline\FilamentArchivable\Tables\Filters\ArchivedFilter; public static function table(Table $table): Table { return $table // ... ->filters([ ArchivedFilter::make(), ]); }
ArchivedFilter
将尊重所有三元过滤器选项,因此请查看 Filament 的 三元过滤器文档 以自定义过滤器。
查看/编辑/删除存档记录的能力
如果您想能够查看/编辑/删除存档记录,您应该在资源 getEloquentQuery()
方法上禁用全局 ArchivedScope::class
// in your resource: use Illuminate\Database\Eloquent\Builder; use Illuminate\Database\Eloquent\SoftDeletingScope; use LaravelArchivable\Scopes\ArchivableScope; public static function getEloquentQuery(): Builder { return parent::getEloquentQuery() ->withoutGlobalScopes([ SoftDeletingScope::class, // only if soft deleting is also active, otherwise it can be ommitted ArchivableScope::class, ]); }
有关默认资源查询的更多信息,请参阅 在 Filament 中禁用全局作用域。
向存档行添加自定义类
此插件附带一个 Table::macro
,允许您向 存档的表行 添加自定义(CSS/Tailwind)类
只需将 ->archivedRecordClasses()
方法添加到包含存档结果的表中即可。
public static function table(Table $table): Table { return $table ->archivedRecordClasses(['opacity-25']); }
支持的语言
- en - 英语
- nl - 荷兰语
您可以通过运行来发布和更改语言文件
php artisan vendor:publish --tag=filament-archivable-translations
测试
最小开发要求
- filament/tables ^3.2.57
composer test
变更日志
请参阅 CHANGELOG 了解最近的变化。
安全漏洞
请查阅 我们的安全策略 了解如何报告安全漏洞。
致谢
许可证
MIT 许可证 (MIT)。有关更多信息,请参阅 许可证文件。