miguilim / filament-auto-panel
在执行时像魔法一样构建您的 Filament 面板资源和关系管理器。
Requires
- php: ^8.0
- filament/filament: ^3.2
- dev-main
- 2.0.1
- 2.0.0
- 1.4.4
- 1.4.3
- 1.4.2
- 1.4.1
- 1.4.0
- 1.3.4
- 1.3.3
- 1.3.2
- 1.3.1
- 1.3.0
- 1.2.6
- 1.2.5
- 1.2.4
- 1.2.3
- 1.2.2
- 1.2.1
- 1.2.0
- 1.1.6
- 1.1.5
- 1.1.4
- 1.1.3
- 1.1.2
- 1.1.1
- 1.1.0
- 1.0.2
- 1.0.1
- 1.0.0
- 0.3.0
- 0.2.13
- 0.2.12
- 0.2.11
- 0.2.10
- 0.2.9
- 0.2.8
- 0.2.7
- 0.2.6
- 0.2.5
- 0.2.4
- 0.2.3
- 0.2.2
- 0.2.1
- 0.2.0
- 0.1.22
- 0.1.21
- 0.1.20
- 0.1.19
- 0.1.18
- 0.1.17
- 0.1.16
- 0.1.15
- 0.1.14
- 0.1.13
- 0.1.12
- 0.1.11
- 0.1.10
- 0.1.9
- 0.1.8
- 0.1.7
- 0.1.6
- 0.1.5
- 0.1.4
- 0.1.3
- 0.1.2
- 0.1.1
- 0.1.0
This package is auto-updated.
Last update: 2024-09-11 09:05:28 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) 表列,因此将被识别为数值列,即使在其上下文中它被用作布尔值。
注意
您可以通过在模型类中设置列的转换来覆盖此自动检测行为。
软删除
该包通过检查模型中是否存在 SoftDeletes 特性以及是否存在 getDeletedAtColumn 方法来检测表是否有软删除。如果检测到软删除,它将在表过滤器中附加 TrashedFilter。
主键
Filament Auto Panel 尝试通过从资源/关系管理器模型中调用 getKeyName() 方法来检测主键。默认情况下,主键是可搜索的,它还将被复制到表格和清单视图中。
关系链接
该包尝试将任何以 _id 结尾的列与 belongsTo 关系链接。它为创建/编辑操作设置可搜索的 Select,并在表格和清单中链接到相应的资源(如果资源存在)的 URL。
注意
此链接目前不支持 morphsTo 检测。欢迎 PRs!
侵入模式
Auto Resources 和 Auto Relation Managers 默认启用侵入模式。当此模式激活时,创建和编辑操作将不会尊重模型的 $fillable 和 $hidden 属性。如果您想禁用此行为,可以在资源或关系管理器类中设置 protected static bool $intrusive = false;。
默认页面
默认情况下,Auto Resources 包含列表和查看页面。创建和编辑记录分别以模态操作的形式在列表和查看页面中可用。
默认操作
默认情况下,Auto Resource 会附加以下默认操作
- 批量操作:
DeleteBulkAction 或 RestoreBulkAction,ForceDeleteBulkAction - 表格操作:
ViewAction 或 RestoreAction - 列表页面操作:
CreateAction - 查看页面操作:
EditAction、DeleteAction 或 RestoreAction、ForceDeleteAction
并且 Auto Relation Manager 附加以下默认操作
- 批量操作:
DeleteBulkAction 或 RestoreBulkAction,ForceDeleteBulkAction - 表格操作:
ViewAction、EditAction 或 RestoreAction - 表头操作:
CreateAction
默认排序
默认情况下,Auto Resource 和 Auto Relation Manager 尝试为以下列设置表格默认排序,按优先级顺序分别为:主键(仅当自增时)、created_at(如果存在)、updated_at(如果存在)。
注意
您可以通过扩展 table(Table $table) 并使用 parent::table($table)->defaultSort(...) 来自定义表的 defaultSort() 方法(以及任何其他方法)。
自动资源
您可以通过以下命令开始使用 Auto Resource
php artisan make:filament-auto-resource
此命令为您创建 Auto Resource 类,就像默认的 filament 命令一样。但是,它使用 AutoResource 类。现在您不需要列出任何内容,您可以直接访问资源页面并看到魔法!
自动关系管理器
Auto Relation Manager 构建一个包含所有关系模型列的表格,排除相关 id 或 morph。您可以使用以下命令生成您的 Auto Relation Manager
php artisan make:filament-auto-relation-manager
此命令为您创建 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'], ), ]; }
自动操作
Auto Resource 和 Auto Relation Manager 提供了 getActions() 方法,但是您不能在它上面使用默认的 Filament 操作。
相反,您必须使用 AutoAction 类。此操作类型具有与 Filament Actions 相同的方法,但它提供了设置操作将显示位置的新方法。由于只有一个数组用于所有资源操作位置,因此这是必需的。
资源 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()。
枚举字典
枚举字典是可用于帮助您格式化资源列值的特性。此功能在表格和 infolist 中设置 badge(),并在表单中使用 Select 显示您设置的值。您可以使用以下方式使用它
protected static array $enumDictionary = [ 'type' => [ 0 => 'Default', 1 => 'Administrator', ] ];
您可以使用以下语法自定义徽章颜色
protected static array $enumDictionary = [ 'type' => [ 0 => ['Default', 'blue'], 1 => ['Administrator', 'red'], ] ];
可见列
默认情况下,所有列都在 Auto Resource 或 Auto Relation Manager 表中显示。您可以使用以下方式自定义列的可见性
protected static array $visibleColumns = [ 'name', 'email', 'created_at' ];
此功能仅设置列的默认可见性在表格右上角的菜单中。您可以使用面板在任何时候启用/禁用任何列的可见性。
注意
您不能自定义表单或 infolist 列的可见性。
可搜索列
您可以使用以下方式为您的 Auto Resource 或 Auto Relation Manager 设置可搜索的列
protected static array $searchableColumns = [ 'name' => 'global', 'email' => 'global', ];
您有以下可搜索选项可供使用:global、individual 或 both。
覆盖列
有时您可能想要完全自定义资源列,您可以通过 getColumnsOverwrite 方法覆盖表列、表单字段或 infolist 条目。
use Filament\Tables\Columns\ImageColumn; public static function getColumnsOverwrite(): array { return [ 'table' => [ ImageColumn::make('profile_photo_url') ->label('Profile Photo') ], 'form' => [ // ], 'infolist' => [ // ], ]; }
注意
您不能使用此方法添加新列,只能覆盖检测到的列。`make()` 参数名称必须与数据库中的列名称相同。
小部件
您可以通过以下方式独立地为您的自动资源设置 list 和 view 页面的小部件
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'), ]; }
许可证
丝状自动面板是开源软件,采用 MIT 许可证。
