开始
资源是用来为模型创建 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()
方法用于定义表单的结构。它是一个《字段》数组,按照它们应该出现在您的表单中的顺序排列。
我们有许多字段可用于您的表单,包括:
- 《文字输入》
- 《选择》
- 《多选》
- 《复选框》
- 《日期时间选择器》
- 《上传文件》
- 《丰富的编辑器》
- 《降价编辑器》
- 《中继器》
要查看可用表单字段的完整列表,请参阅《表单生成器文档》。
您还可以构建自己的完全《自定义的表单域》。
布局
表单布局是完全可定制的。我们有许多可用的布局组件,可以任意组合使用:
- 《网格》
- 《卡片》
- 《选项卡》
要查看可用布局组件的完整列表,请参阅《Form Builder 文档》。
您还可以构建自己的完全《自定义布局组件》。
根据上下文隐藏组件
表单组件的方法 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'),
表格
资源类包含一个静态 table()
方法,用于在列表页面上构建表:
use Filament\Resources\Table;
use Filament\Tables;
use Illuminate\Database\Eloquent\Builder;
public static function table(Table $table): Table
{
return $table
->columns([
Tables\Columns\TextColumn::make('name'),
Tables\Columns\TextColumn::make('email'),
// ...
])
->filters([
Tables\Filters\Filter::make('verified')
->query(fn (Builder $query): Builder => $query->whereNotNull('email_verified_at')),
// ...
])
->actions([
Tables\Actions\EditAction::make(),
])
->bulkActions([
Tables\Actions\DeleteBulkAction::make(),
]);
}
查看 记录列表 文档,了解如何添加表《列》、《过滤器》、《操作》、《批量操作》等。
关系
Filament 有许多实用程序可用于管理资源关系。您选择使用哪种解决方案取决于您的用例:
BelongsTo
选择记录
Filament 包括从关系中自动加载选项的能力 BelongsTo
:
use Filament\Forms\Components\Select;
Select::make('author_id')
->relationship('author', 'name')
《表单文档》中提供了更多信息。
布局组件
布局表单组件能够将《子数据保存到关系中》,例如 BelongsTo
:
use Filament\Forms\Components\Fieldset;
use Filament\Forms\Components\FileUpload;
use Filament\Forms\Components\Textarea;
use Filament\Forms\Components\TextInput;
Fieldset::make('Author')
->relationship('author')
->schema([
TextInput::make('name')->required(),
Textarea::make('bio'),
])
有关详细信息,请参阅《表单文档》。
HasOne
布局表单组件能够《将子数据保存到关系中》,例如HasOne
:
use Filament\Forms\Components\Fieldset;
use Filament\Forms\Components\FileUpload;
use Filament\Forms\Components\Textarea;
use Filament\Forms\Components\TextInput;
Fieldset::make('Metadata')
->relationship('metadata')
->schema([
TextInput::make('title'),
Textarea::make('description'),
FileUpload::make('image'),
])
推荐文章: