miguilim/filament-auto-resource

此包已被弃用,不再维护。作者建议使用miguilim/filament-auto-panel包代替。

在执行时像魔法一样构建您的Filament面板资源和关系管理器。

1.0.2 2023-08-28 07:09 UTC

README

Filament Auto Panel art

Filament Auto Panel

Latest Version on Packagist Total Downloads

在执行时像魔法一样构建您的Filament面板资源和关系管理器。此包提供自定义资源和关系管理器类,在执行时通过扫描数据库当前表架构来挂载表、创建、查看和编辑页面,同时仍然允许您创建操作、小部件和各种自定义以供面板使用。

重要
此包旨在用于管理面板,类似于Laravel Nova的工作方式,以及所有自动生成的内容。您也可以将其视为数据库管理工具。如果您感觉需要更定制化的资源工作流程,请重新考虑不要使用此包。

内容

安装

您可以通过composer安装此包

composer require miguilim/filament-auto-panel

用法

在开始使用此包之前,您必须了解表格架构读取器的一些行为。包考虑您在数据库中的实际表架构,而不是迁移文件。然而,为了生成正确的列,正确使用迁移中的字段非常重要。

一个例子是当您使用boolean()列方法时,Laravel将生成一个tinyint(1)表列。Filament Auto Panel将使用此特定的列类型和长度来检测它是一个布尔列。如果您使用tinyInteger()方法,它将生成一个tinyint(4)表列,因此将识别为数值列,即使在其上下文中它被用作布尔值。

注意
您可以通过在模型类中设置列的cast来覆盖此自动检测行为。

软删除

通过检查模型中是否存在SoftDeletes特质和bootSoftDeletes方法,包检测表是否具有软删除。如果检测到软删除,它将在表过滤器中附加TrashedFilter

主键

通过从资源/关系管理器模型调用getKeyName()方法,Filament Auto Panel试图检测主键。默认情况下,主键是可搜索的,它还将在表格和列表视图中复制。

关系链接

该包试图将所有以 _id 结尾的列链接到属于关系。它为创建/编辑操作设置了一个可搜索的 Select,并在表中以及信息列表中(如果存在资源)设置了一个链接到相应资源的URL。

注意
当前不支持 morphsTo 检测。欢迎提交PR!

默认页面

默认情况下,自动资源具有列表和查看页面。创建和编辑记录分别作为列表和查看页面中的模态操作可用。

默认操作

默认情况下,自动资源附加以下默认操作

  • 批量操作:DeleteBulkAction or RestoreBulkAction, ForceDeleteBulkAction
  • 表格操作:ViewAction or RestoreAction
  • 页面操作:DeleteAction or RestoreAction, ForceDeleteAction

默认排序

默认情况下,自动资源和自动关系管理器试图为以下列设置表格默认排序,按优先级顺序分别为:主键(仅当自增时)created_at(如果存在)updated_at(如果存在)

注意
您可以通过扩展 table(Table $table) 并使用 parent::table($table)->defaultSort(...) 来自定义表的 defaultSort()(以及任何其他方法)。

自动资源

您可以通过以下命令开始创建第一个自动资源

php artisan make:filament-auto-resource

此命令为您创建自动资源类,就像默认的filament命令一样。但是,它使用 AutoResource 类。现在您不需要列出任何内容,您可以直接访问资源页面并见证魔法!

自动关系管理器

自动关系管理器构建一个包含所有关系模型列的表,排除相关id或形态。您可以使用以下命令生成自动关系管理器

php artisan make:filament-auto-relation-manager

此命令为您创建自动关系管理器,您必须在资源的 getRelations() 方法中列出它。但是,有时您可能想要更方便的东西。您可以使用 RelationManagerMounter 在资源内部创建关系管理器。以下是如何工作的示例

use Miguilim\FilamentAutoPanel\Mounters\RelationManagerMounter;

public static function getRelations(): array
{
    return [
        RelationManagerMounter::make(
            resource: static::class,
            relation: 'userBans',
            recordTitleAttribute: 'Bans',
            visibleColumns: ['reason', 'created_at'],
        ),
    ];
}

自动操作

自动资源和自动关系管理器提供了一个 getActions() 方法,但是您不能在它上面使用默认的Filament操作。

相反,您必须使用 AutoAction 类。此动作类型具有与Filament动作相同的方法,但是它提供了设置动作显示位置的新方法。这是必需的,因为只有一个数组用于所有资源动作位置。

资源 action 闭包始终接收一个模型集合。下面是如何工作的示例

use Miguilim\FilamentAutoPanel\AutoAction;
use Illuminate\Database\Eloquent\Collection;

public static function getActions(): array
{
    return [
        AutoAction::make('refund')
            ->label('Refund')
            ->icon('heroicon-o-arrow-path')
            ->color('danger')
            ->action(fn (Collection $records) => $records->each->refund())
            ->showOnTable()
            ->showOnViewPage(),
    ];
}

注意
默认情况下,自动动作不会在任何地方显示,因此您必须设置以下方法之一:showOnTable()showOnBulkAction()showOnViewPage()

枚举字典

枚举字典是可用于帮助您格式化资源列值的特性。此特性在表格和信息列表中设置 badge(),并在表单中使用您设置的值设置 Select。您可以使用以下方式使用它

protected static array $enumDictionary = [
    'type' => [
        0 => 'Default',
        1 => 'Administrator',
    ]
];

您可以使用以下语法自定义徽章颜色

protected static array $enumDictionary = [
    'type' => [
        0 => ['Default', 'blue'],
        1 => ['Administrator', 'red'],
    ]
];

可见列

默认情况下,所有列都显示在自动资源或自动关系管理器表中。您可以使用以下方法自定义列的可见性:

protected static array $visibleColumns = [
    'name', 'email', 'created_at'
];

此功能仅设置表右上角菜单中的列默认可见性。您可以使用面板在任何时候启用/禁用任何列的可见性。

注意
您无法自定义表单或信息列表列的可见性。

可搜索列

您可以使用以下方法为自动资源或自动关系管理器设置可搜索列:

protected static array $searchableColumns = [
    'name'  => 'global',
    'email' => 'global',
];

您有以下可搜索选项可供选择:全局单个两者

覆盖列

有时您可能希望完全自定义资源列,您可以使用getColumnsOverwrite方法覆盖表列、表单字段或信息列表条目

use Filament\Tables\Columns\ImageColumn;

public static function getColumnsOverwrite(): array
{
    return [
        'table' => [
            ImageColumn::make('profile_photo_url')
                ->label('Profile Photo')
        ],
        'form' => [
            //
        ],
        'infolist' => [
            //
        ],
    ];
}

注意
您不能使用此方法添加新列,只能覆盖检测到的列。make参数名称必须与数据库中的列名称相同。

小部件

您可以使用以下方式独立地为您的自动资源设置列表查看页面的小部件:

public static function getHeaderWidgets(): array
{
    return [
        'list' => [
            MyCoolStatsWidget::class,
        ],
        'view' => [
            //
        ],
    ];
}

public static function getFooterWidgets(): array
{
    return [
        'list' => [
            //
        ],
        'view' => [
            //
        ],
    ];
}

附加页面

您可以使用getExtraPages方法为您的自动资源添加附加页面

public static function getExtraPages(): array
{
    return [
        MyCustomResourcePage::route('/custom-path'),
    ];
}

许可协议

Filament Auto Panel是开源软件,许可协议为MIT许可协议