Laravel8控制器自定义验证错误消息:检查失败状态并显示错误信息
Laravel 8 控制器验证失败时显示具体错误消息
你的原代码在验证失败时只存入了固定的error文本,没法展示具体的验证问题(比如邮箱格式错误、密码长度不够等)。下面是调整后的代码,能正确返回并显示对应错误消息:
protected function validator(array $data) { $validation = Validator::make($data, [ 'email' => ['required', 'string', 'email', 'max:255', 'unique:users'], 'password' => ['required', 'string', 'min:8', 'confirmed'] ]); if ($validation->fails()) { // 获取所有验证错误,转为换行分隔的字符串 $errorMessages = $validation->errors()->all()->implode('<br>'); // 将错误消息存入session session()->flash('alert-danger', $errorMessages); // 重定向回表单页面,保留用户输入内容 return redirect()->back()->withInput(); } // 验证通过时返回验证器实例(可选,方便后续逻辑使用) return $validation; }
关键说明:
$validation->errors()->all()会返回所有错误消息的数组,用implode('<br>')拼接成适合前端显示的格式redirect()->back()->withInput()能让用户回到表单时保留之前输入的内容,不用重新填写- 如果你更想遵循Laravel的默认验证逻辑,可以直接抛出验证异常,框架会自动处理重定向和错误消息:
if ($validation->fails()) { throw \Illuminate\Validation\ValidationException::withMessages($validation->errors()->toArray()); }
前端显示示例(Blade模板):
如果用session存的错误消息,可以这样显示:
@if(session('alert-danger')) <div class="alert alert-danger"> {!! session('alert-danger') !!} </div> @endif
如果用Laravel自带的错误变量,也可以针对每个字段单独显示:
@error('email') <div class="alert alert-danger">{{ $message }}</div> @enderror @error('password') <div class="alert alert-danger">{{ $message }}</div> @enderror
内容的提问来源于stack exchange,提问作者Rümeysa
相关产品推荐
相关产品推荐

