本文目录导读:

在 Laravel 中,验证错误默认会存储到 session 中,但具体机制取决于你使用的验证方式:
使用 validate() 方法(自动存储)
public function store(Request $request)
{
$validated = $request->validate([
'title' => 'required|max:255',
'body' => 'required',
]);
// 验证通过...
}
默认行为:
- 验证失败时,Laravel 会自动抛出
ValidationException - 异常被全局异常处理器捕获后,会将错误信息闪存到 session(
session()->flash('errors', ...)) - 然后重定向回上一个页面(withInput)
手动使用 Validator(需手动存储)
use Illuminate\Support\Facades\Validator;
public function store(Request $request)
{
$validator = Validator::make($request->all(), [
'title' => 'required|max:255',
]);
if ($validator->fails()) {
// 需要手动将错误存入 session
return redirect()->back()
->withErrors($validator) // 这个方法会自动存到 session
->withInput();
}
}
错误在 session 中的存储方式
错误存储在 $_SESSION['errors'] 中,但 Laravel 封装为 MessageBag 对象:
// 在视图中获取错误
@if ($errors->any())
<div class="alert alert-danger">
<ul>
@foreach ($errors->all() as $error)
<li>{{ $error }}</li>
@endforeach
</ul>
</div>
@endif
// 获取特定字段的错误
@error('title')
<div class="alert alert-danger">{{ $message }}</div>
@enderror
查看 session 中的错误
// 在控制器或中间件中
dump(session()->get('errors'));
// 或
dump($errors);
特别说明
- 每次新请求:错误会在新的请求中自动清除(闪存机制)
- API 路由:默认不存储到 session,而是直接返回 JSON 错误响应
- 自定义存储:你可以通过
withErrors()方法的第二个参数指定自定义 bag 名称
只要使用 Laravel 推荐的验证方式($request->validate() 或 withErrors()),验证错误都会自动存储到 session 中,无需手动处理。