You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 17:20:44