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

Filament框架:如何传递编辑状态至页面以生效表单控制?

问题描述

点击表格中的Edit按钮时,表单的hiddenOn()和disabledOn()功能正常生效;但点击View弹窗底部的Edit按钮时,这两个功能失效。相关代码如下:

public static function form(Form $form): Form
{
    return $form
        ->schema([
            TextInput::make('name')->required(),
            TextInput::make('email')->email()->required()->disabledOn('edit'),
            TextInput::make('password')->password()->required()->hiddenOn('edit'),
        ]);
}

public static function table(Table $table): Table
{
    return $table
        ->columns([
            TextColumn::make('id'),
            TextColumn::make('name'),
            TextColumn::make('email'),
        ])
        ->actions([
            Tables\Actions\ViewAction::make()
                ->extraModalFooterActions([
                    Tables\Actions\EditAction::make()
                ]),
            Tables\Actions\EditAction::make(),
        ]);
}

public static function getPages(): array
{
    return [
        'index' => Pages\ListUsers::route('/'),
    ];
}
解决方案

问题根源是弹窗内的EditAction没有正确传递表单的编辑状态,可通过以下方式修复:

  • 复用现有表单并显式指定编辑模式
    直接让弹窗内的EditAction调用已定义的form方法,并强制设置表单模式为edit:

    Tables\Actions\EditAction::make()
        ->form(fn (Form $form) => static::form($form)->mode('edit'))
    
  • 手动构建表单并指定状态路径
    如果需要自定义表单逻辑,可在EditAction内重新构建表单,同时确保状态路径正确:

    Tables\Actions\EditAction::make()
        ->form(function (Form $form) {
            return $form
                ->schema([
                    TextInput::make('name')->required(),
                    TextInput::make('email')->email()->required()->disabledOn('edit'),
                    TextInput::make('password')->password()->required()->hiddenOn('edit'),
                ])
                ->statePath('data');
        })
    

以上两种方式都能让弹窗内的Edit按钮触发的表单正确识别edit状态,使hiddenOn()和disabledOn()功能正常生效。

内容的提问来源于stack exchange,提问作者user1995781

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 17:12:38