miguilim / filament-auto-resource
Requires
- php: ^8.0
- doctrine/dbal: ^3.6
- filament/filament: ^3.0
This package is auto-updated.
Last update: 2023-08-28 19:21:54 UTC
README
Filament Auto Panel
在执行时像魔法一样构建您的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许可协议。