表单字段控件
开始
字段类(Field)位于 Filament\Form\Components
命名空间中。
字段组件和布局组件一起,在表单 schema 中。
如果你想在 Livewire 组件中使用这些字段,你可以将它们放到 getFormSchema()
方法中:
protected function getFormSchema(): array
{
return [
// ...
];
}
如果你在后台面板的资源或者关联管理器中使用,你必须将它们放在 $form->schema()
方法中:
public static function form(Form $form): Form
{
return $form
->schema([
// ...
]);
}
字段可以用静态方法 make()
传入字段名为参数创建。字段名应该对应 Livewire 组件的属性名。你可以使用 Livewire "点语法"将字段绑定到像数组或者 Eloquent 模型这样的嵌套属性中。
use Filament\Forms\Components\TextInput;
TextInput::make('name')
设置标签
默认情况下,字段标签会按照字段名自动 生成。你可以使用 label()
方法重写字段标签。如果你想使用语言本地化,可以使用这种方法自定义标签:
use Filament\Forms\Components\TextInput;
TextInput::make('name')->label(__('fields.name'))
此外,你也可以使用 translateLabel()
方法自动翻译标签:
use Filament\Forms\Components\TextInput;
TextInput::make('name')->translateLabel() // 相当于 `label(__('Name'))
设 置ID
像设置标签一样,字段ID会根据他们的字段名自动生成。可以使用 id()
重写:
use Filament\Forms\Components\TextInput;
TextInput::make('name')->id('name-field')
设置默认值
字段可以有默认值。如果表单 fill()
方法调用时没有传参,就会填充这个默认值。使用 default()
方法,可以定义默认值:
use Filament\Forms\Components\TextInput;
TextInput::make('name')->default('John')
帮助消息及提示
有时,你需要为表单用户提供额外消息。这种情况下,你可以使用帮助消息或者提示。
帮助消息显示在字段下面。helperText()
方法支持 Mardown 格式:
use Filament\Forms\Components\TextInput;
TextInput::make('name')->helperText('Your full name here, including any middle names.')
提示可以显示在标签旁边:
use Filament\Forms\Components\TextInput;
TextInput::make('password')->hint('[Forgotten your password?](forgotten-password)')
提示也可以添加图标,将其渲染在旁边:
use Filament\Forms\Components\RichEditor;
RichEditor::make('content')
->hint('Translatable')
->hintIcon('heroicon-s-translate')
提示也可以添加颜色color()
。默认是灰色,不过你也可以设为 primary
、success
、warning
或 danger
:
use Filament\Forms\Components\RichEditor;
RichEditor::make('content')
->hint('Translatable')
->hintColor('primary')
自定义属性
可以在 extraAttributes()
中传入一个数组,自定义字段所在代码块的 HTML 属性:
use Filament\Forms\Components\TextInput;
TextInput::make('name')->extraAttributes(['title' => 'Text input'])
如果要将额外的HTML属性添加到输入框本身,则使用 extraInputAttributes()
:
use Filament\Forms\Components\TextInput;
TextInput::make('categories')
->extraInputAttributes(['multiple' => true])
禁用
你可以禁用字段,使之不能编辑:
use Filament\Forms\Components\TextInput;
TextInput::make('name')->disabled()
另外,也可以传一个布尔值控制字段是否禁用:
use Filament\Forms\Components\Toggle;
Toggle::make('is_admin')->disabled(! auth()->user()->isAdmin())
请注意,禁用字段并不会影响保存,懂技术的用户仍然可以操作页面HTML改变他的值。
要阻止字段值被保存,请使用 dehydrated(false)
方法:
Toggle::make('is_admin')->dehydrated(false)
此外,你也可以根据情况决定是否保存一个字段,比如当用户是管理员时:
Toggle::make('is_admin')
->disabled(! auth()->user()->isAdmin())
->dehydrated(auth()->user()->isAdmin())
use Filament\Resources\Pages\CreateRecord;
use Filament\Resources\Pages\Page;
TextInput::make('slug')
->disabled()
->dehydrated(fn (Page $livewire) => $livewire instanceof CreateRecord)