Laravel Filament表单:如何根据Toggle状态禁用Select字段
Laravel Filament表单字段联动禁用方案
要实现当status Toggle关闭(值为false)时禁用day Select字段,只需在day组件中添加基于status状态的disabled回调即可,核心是利用Filament的live()状态同步和$get方法获取其他字段值。
修改后的完整表单代码
public static function form(Form $form): Form { return $form ->schema([ Select::make('user_id') ->default(auth()->user()->id) ->relationship('user', 'id') ->visible(false) ->required(), Toggle::make('status') ->default(true) ->live() // 保持实时状态同步 ->required(), Select::make('day') ->enum(Days::class) ->options(Days::class) // 关键:当status为false时禁用当前字段 ->disabled(fn (Get $get) => !$get('status')), Forms\Components\DatePicker::make('open') ->default(null), Forms\Components\DatePicker::make('close') ->default(null), Forms\Components\TextInput::make('phone') ->tel() ->maxLength(255), ]); }
关键说明
Toggle的live()方法必须保留,它会把切换状态实时同步到Filament的表单状态容器中,确保day组件能实时获取到最新的status值。disabled(fn (Get $get) => !$get('status')):通过$get('status')获取toggle的当前值,当status为false时,!$get('status')返回true,触发字段禁用;当status为true时,返回false,字段保持可用。
如果需要在禁用的同时隐藏字段,可以把disabled换成hidden,或者同时使用两者:->hidden(fn (Get $get) => !$get('status'))->disabled(fn (Get $get) => !$get('status'))。
内容的提问来源于stack exchange,提问作者kristi tanellari
相关产品推荐
相关产品推荐

