Laravel Filament中FileUpload的filled()验证不生效问题求助
问题分析与解决
在Laravel Filament中,TextInput调用filled()能触发空值提示,但FileUpload用filled()却无提示,核心原因是FileUpload组件的验证逻辑和TextInput存在差异:
- TextInput的
filled()会直接验证字段是否存在非空值,提交空值时立刻触发提示。 - FileUpload的
filled()仅在字段已有值(比如编辑场景下原本存在文件,用户删除后提交)时才会生效;如果是新增场景,用户未上传文件时,该字段不会被标记为“需验证项”,因此filled()不会触发提示。
解决方法
1. 所有场景强制上传文件
直接将filled()替换为required()即可:
FileUpload::make('image') ->columnSpan('full') ->required() // 替换filled()为required() ->disk('public') ->directory('gallery') ->visibility('public') ->imageResizeMode('force') ->imageCropAspectRatio('8:5') ->imageResizeTargetWidth('800') ->imageResizeTargetHeight('500') ->image() ->imageEditor()
2. 仅新增场景强制上传,编辑场景允许保留原有文件
如果是在资源表单中,可结合Filament的页面类型做条件验证:
FileUpload::make('image') ->columnSpan('full') ->required(fn ($livewire) => $livewire instanceof \Filament\Resources\Pages\CreateRecord) ->disk('public') ->directory('gallery') ->visibility('public') ->imageResizeMode('force') ->imageCropAspectRatio('8:5') ->imageResizeTargetWidth('800') ->imageResizeTargetHeight('500') ->image() ->imageEditor()
这样新增数据时必须上传图片,编辑时可保留原有图片无需重新上传。
内容的提问来源于stack exchange,提问作者tolga
相关产品推荐
相关产品推荐

