Laravel数组验证中如何显示含动态值的错误提示信息
解决Laravel 5.4数组验证自定义错误提示的问题
要把错误提示中的student_id.1、student_id.2替换为用户实际输入的内容,你可以借助Laravel验证系统提供的:input占位符,自定义对应验证规则的错误消息。具体做法如下:
方法一:在验证时直接传入自定义消息数组
如果你在控制器中使用Validator::make()创建验证实例,可以在第三个参数中定义自定义消息:
use Illuminate\Support\Facades\Validator; // 获取请求数据 $data = $request->all(); // 定义验证规则 $rules = [ 'student_id.*' => 'required|exists:studentinfo,batch_id|distinct|unique:student_projects,student_batchid', ]; // 定义自定义错误消息 $messages = [ 'student_id.*.required' => '批次ID不能为空', 'student_id.*.exists' => ':input 不存在于系统记录中', 'student_id.*.distinct' => ':input 重复输入了,请检查', 'student_id.*.unique' => ':input 已经被分配给某个项目了', ]; // 创建验证器并执行验证 $validator = Validator::make($data, $rules, $messages); if ($validator->fails()) { return redirect()->back() ->withErrors($validator) ->withInput(); }
方法二:使用控制器的messages()方法(适用于$this->validate())
如果你习惯用控制器自带的validate()方法,可以在控制器中定义messages()方法返回自定义消息:
public function messages() { return [ 'student_id.*.exists' => ':input is not exists.', 'student_id.*.distinct' => ':input is duplicated.', 'student_id.*.unique' => ':input has already been used.', // 其他规则的消息按需添加 ]; } // 在处理请求的方法中执行验证 public function store(Request $request) { $this->validate($request, [ 'student_id.*' => 'required|exists:studentinfo,batch_id|distinct|unique:student_projects,student_batchid', ]); // 后续业务逻辑... }
关键说明
:input是Laravel验证消息的内置占位符,会自动替换为当前验证的数组元素对应的用户输入值,这样错误提示就会显示用户输入的具体批次ID,而不是student_id.1这类字段标识。- 你可以根据需求自由调整消息文本,比如换成中文或者更贴合业务场景的描述。
内容的提问来源于stack exchange,提问作者Fokrule
相关产品推荐
相关产品推荐

