okeonline/filament-archivable

一个用于使用可存档模型的丝印插件

v1.1.0 2024-08-09 17:21 UTC

This package is auto-updated.

Last update: 2024-09-09 17:27:57 UTC


README

Filament Archivable

用于存档、解存档和筛选记录的丝印插件

Latest Version on Packagist GitHub Tests Action Status GitHub Code Style Action Status Total Downloads

基于 Joe Butcher 的 Laravel Archivable 包的存档和未存档表记录(eloquent 模型)的 Filament 插件。

此 Filament 插件为您的资源表添加了 ArchiveActionUnArchiveActionArchivedFilter。还可以 为存档记录添加自定义行类。除了表操作外,该包还提供页面操作,用于存档和解存档记录。

要求

  • 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 包

请按照他的安装说明进行操作,简要来说,需要

  1. 在您的表中添加一个 archived_at
  2. 在您的模型上使用 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

Actions

您应该将 两个 操作都添加到同一个表中。操作本身将决定是否在记录上显示。

这些操作是正常的 操作,类似于 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(),
        ]);
}

Filters

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

Custom classes

支持的语言

  • en - 英语
  • nl - 荷兰语

您可以通过运行来发布和更改语言文件

php artisan vendor:publish --tag=filament-archivable-translations

测试

最小开发要求

  • filament/tables ^3.2.57
composer test

变更日志

请参阅 CHANGELOG 了解最近的变化。

安全漏洞

请查阅 我们的安全策略 了解如何报告安全漏洞。

致谢

许可证

MIT 许可证 (MIT)。有关更多信息,请参阅 许可证文件