开始
资源是用来为模型创建 CRUD 接口的静态类。它描述了管理员如何在应用内,使用表格和表单,与数据进行交互的。
新建资源
为 App\Models\Customer
模型新建资源:
php artisan make:filament-resource Customer
在 app/Filament/Resources
目录下将会生成一系列文件:
.
+-- CustomerResource.php
+-- CustomerResource
| +-- Pages
| | +-- CreateCustomer.php
| | +-- EditCustomer.php
| | +-- ListCustomers.php
新的资源类在 CustomerResource.php
中。
Pages
目录下的类用于自定义后台管理面板中和资源交互的页面。这些页面是全页Livewire组件,你可以根据需要自定义。
如果你创建的资源并没有在导航菜单中显示,很可能是因为你的模型策略的
viewAny()
方法并没有返回true
。
简易(模态框)资源
有时候,你的模型过于简单,因此你只想在单个页面中管理记录。这种情况下你可以使用模态框进行创建,编辑和删除记录。要生成这样一个带有模态框的简易资源:
php artisan make:filament-resource Customer --simple
你的资源有一个管理(Manage)页面,该页面是一个带有模态框的列表页。
另外,你的资源类不再会有 getRelations()
方法,因为关系管理器只会在编辑页和查看页中展示,不会出现在简易资源中。其他方面则与普通资源相同。
自动生成表单和表格
如果你要节约时间,Filament 也可以基于你模型 数据库的字段,为你自动生成一些表单和表格:
使用此功能需要安装 doctrine/dbal
包:
composer require doctrine/dbal --dev
现在你可以使用 --generate
来生成资源了:
php artisan make:filament-resource Customer --generate
注意:如果表格中含有 ENUM 字段,
doctrine/dbal
将无法扫描表格且会崩溃。因此 Filament 无法据此为资源生成 schema。更多详情查阅此处。
处理软删除
默认情况下,在后台面板中你不能处理删除了的记录。如果你想要在资源中添加恢复(restore)、强制删除和过滤垃圾记录等功能,可以在生成资源的时候使用 --soft-deletes
标志:
php artisan make:filament-resource Customer --soft-deletes
更多软删除的相关内容,查看此处。
生成查看页面
默认情况下,资源只会生成列表页,新建页和编辑页。如果你也想要生成[查看页],使用 --view-page
:
php artisan make:filament-resource Customer --view-page
记录标题
资源可以设置 $recordTitleAttribute
属性,该属性对应模型上的字段名,可以用于将其与其他模型区别开来。(译者:此处直译,意思是大体是在搜索时用以确认某条记录的唯一性。)
比如,它可以是博客文章的标题(title)
或者客户的名字(name)
:
protected static ?string $recordTitleAttribute = 'name';
此属性需要启用全局搜索特性才有效。
如果某个单一字段无法有效识别一条记录,你可以指定一个 Eloquent 获取器的名称。
表单
资源类中包含着一个 form()
方法,用于为新建和编辑页面创建表单:
use Filament\Forms;
use Filament\Resources\Form;
public static function form(Form $form): Form
{
return $form
->schema([
Forms\Components\TextInput::make('name')->required(),
Forms\Components\TextInput::make('email')->email()->required(),
// ...
]);
}
表单控件
schema()
方法用于定义表单结构。它是一个表单控件数组,按照显示顺序在表单中排序。
表单的可用字段包括:
布局
表单布局完全可以自定义。我们提供了许多布局组件,它们之间可以联合使用:
你也可以创建你自己的完全自定义布局组件。
根据情况隐藏组件
表单组件的 hiddenOn()
方法让你可以基于当前页面或操作隐藏控件。
此例中,我们在 edit
编辑页面中隐藏了 password
字段控件:
use Livewire\Component;
Forms\Components\TextInput::make('password')
->password()
->required()
->hiddenOn('edit'),
此外,有一个 visibleOn()
快捷方法用以在指定页面或操作中显示控件。
use Livewire\Component;
Forms\Components\TextInput::make('password')
->password()
->required()
->visibleOn('create'),