Filament 3表单中隐藏Select字段并保留默认值求助
解决方案
方案一:隐藏Select字段并强制提交默认值
Filament 中->hidden()方法会默认标记字段为不脱水(即不随表单提交),因此需要同时开启->dehydrated(true)来保留默认值的提交逻辑。修改代码如下:
public static function form(Form $form): Form { return $form ->schema([ TextInput::make('description') ->required(), Select::make('companies') ->label('Company') ->relationship('companies', 'name') ->options(function () { $user = Auth::user(); return $user->companies()->select('companies.id', 'companies.name')->pluck('name', 'id'); }) ->default(function () { $user = Auth::user(); return $user->companies()->first()->id ?? null; }) ->required() ->hidden() ->dehydrated(true), // 强制字段值随表单提交 ]); }
方案二:替换为Hidden字段(更简洁)
既然无需展示选择器,直接用Hidden字段存储默认值更高效,避免Select组件的冗余逻辑:
use Filament\Forms\Components\Hidden; public static function form(Form $form): Form { return $form ->schema([ TextInput::make('description') ->required(), Hidden::make('companies') ->default(function () { $user = Auth::user(); return $user->companies()->first()->id ?? null; }) ->required(), ]); }
注意事项
- 确保模型中已正确定义
companies关联关系,避免提交后出现关联保存错误。 - 方案一中的
->options()逻辑可移除(字段已隐藏,前端不会渲染选项),以优化性能。
内容的提问来源于stack exchange,提问作者user23450337
相关产品推荐
相关产品推荐

