Laravel验证错误存session吗

wen PHP项目 1

本文目录导读:

Laravel验证错误存session吗

  1. 使用 validate() 方法(自动存储)
  2. 手动使用 Validator(需手动存储)
  3. 错误在 session 中的存储方式
  4. 查看 session 中的错误
  5. 特别说明

在 Laravel 中,验证错误默认会存储到 session 中,但具体机制取决于你使用的验证方式:

使用 validate() 方法(自动存储)

public function store(Request $request)
{
    $validated = $request->validate([
        'title' => 'required|max:255',
        'body' => 'required',
    ]);
    // 验证通过...
}

默认行为

  • 验证失败时,Laravel 会自动抛出 ValidationException
  • 异常被全局异常处理器捕获后,会将错误信息闪存到 sessionsession()->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 中,无需手动处理。

抱歉,评论功能暂时关闭!