Laravel Livewire数组验证错误消息不显示问题求助
解决数组验证错误消息无法在表格中显示的问题
问题根源分析
你的代码存在三个核心问题导致错误消息无法正常显示:
- @error指令的变量插值错误:Blade的
@error指令参数不能用{{ }}包裹变量,否则会被解析为字符串字面量,无法匹配实际的错误字段。 - Wire模型字段与验证规则不匹配:验证规则中使用的是
requirements.*.file,但模板里的wire:model写成了requirement.{{ $requirements->id }}.file(少了复数s),字段名不一致导致错误无法关联。 - 数组索引不一致:模板中
wire:model使用$requirements->id作为数组索引,但@error里用的是$key,两者不统一导致错误绑定失败。
修正后的代码
Blade模板代码(requirements部分)
<input type="hidden" name="req_id[{{ $key }}]" wire:model="req_id.{{ $key }}.id" value="{{ $requirements->id }}"> <input type='file' wire:model="requirements.{{ $key }}.file" class="form-control @error("requirements.$key.file") is-invalid @enderror" accept=".pdf"> @error("requirements.$key.file") <div class="invalid-feedback">{{ $message }}</div> @enderror
Blade模板代码(input部分)
<input type="hidden" name="req_id[{{ $key }}]" wire:model="req_id.{{ $key }}.id" value="{{ $input->id }}"> <input type='text' wire:model.defer="input.{{ $key }}.input" class="form-control @error("input.$key.input") is-invalid @enderror"> @error("input.$key.input") <div class="invalid-feedback">{{ $message }}</div> @enderror
关键说明
- @error指令使用正确姿势:在
@error中直接用字符串拼接变量(如"requirements.$key.file"),不需要额外的{{ }}包裹,Blade会自动解析变量值。 - 字段名完全匹配:确保
wire:model的字段名和后端验证规则中的字段完全一致(比如requirements.{{ $key }}.file对应验证规则的requirements.*.file)。 - 添加is-invalid类:给输入框添加
@error(...) is-invalid @enderror类,Bootstrap的invalid-feedback样式只有在输入框带有is-invalid类时才会显示。 - 索引统一:保持
wire:model和@error中的数组索引一致(这里统一使用$key,如果要改用$requirements->id,则两处都要替换成该值)。
内容的提问来源于stack exchange,提问作者Bilhaq 2612
相关产品推荐
相关产品推荐

