Laravel表单提交时描述文本域form-control错误提示失效问题
1. 添加「至少350字」的校验规则
首先在后端验证逻辑中为item_description字段添加规则,两种实现方式可选:
方式一:使用表单请求类(推荐)
如果项目中用了自定义表单请求类(比如ItemRequest.php),在rules()方法里补充规则:
public function rules() { return [ // 保留其他字段的原有规则 'item_description' => 'required|min:350', ]; }
如果需要自定义错误提示文案,可在请求类中添加messages()方法:
public function messages() { return [ 'item_description.min' => '描述内容至少需要填写350字', 'item_description.required' => '描述内容不能为空', ]; }
方式二:在控制器中直接验证
如果是在控制器方法内做验证,修改validate逻辑:
public function store(Request $request) { $validatedData = $request->validate([ // 保留其他字段的原有规则 'item_description' => 'required|min:350', ]); // 后续业务逻辑 }
2. 修复错误提示失效问题
从你的Blade代码来看,前端错误提示的结构是正确的,失效大概率是以下原因导致:
原因一:后端未配置验证规则(最常见)
如果后端没有为item_description设置任何验证规则,Laravel不会生成对应的错误信息,前端的@error('item_description')自然不会触发。先确保完成第一步的校验规则配置。
原因二:invalid-tooltip样式依赖问题
Bootstrap的invalid-tooltip需要父容器设置position: relative才能正常显示,如果你的col-md-12容器没有这个样式,提示会被隐藏。可以换成无需额外定位的invalid-feedback:
@error('item_description') <span class="invalid-feedback d-block"> <strong>{{ $message }}</strong> </span> @enderror
原因三:旧数据保留逻辑异常
Laravel的validate方法和表单请求类会自动在验证失败时重定向并携带旧数据,但如果是手动处理验证逻辑,要确保调用redirect()->back()->withInput()->withErrors($validator)返回,你的Blade代码中old('item_description')的写法是正确的。
原因四:字段名称不匹配
确认后端验证规则的字段名和前端文本域的name属性完全一致,你的代码中都是item_description,这部分没问题。
完成上述配置后,提交少于350字的描述内容,即可触发错误提示。
内容的提问来源于stack exchange,提问作者nomib

