You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.28 09:25:19