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

PHP及Laravel如何将session中的错误数据传递到$errors参数

Laravel传递session错误到$errors变量的完整流程

整个过程由Laravel框架的内置逻辑自动完成,不需要手动处理,核心分为3个环节:

  1. 验证失败时的错误闪存
    当自定义的FormRequest类校验失败时,Laravel会自动生成重定向回上一页面的响应,同时调用withErrors()方法把所有验证错误信息闪存到session的errors键下。闪存数据的生命周期只有下一次请求,页面加载完成后就会自动销毁。

  2. 中间件完成视图变量共享
    Laravel默认的web路由组会自动注册\Illuminate\View\Middleware\ShareErrorsFromSession中间件,这个中间件的核心作用就是把session里的错误数据同步到视图:

    • 每次请求进入、视图渲染前,中间件会先检查session中是否存在errors闪存数据
    • 存在就把数据实例化为Illuminate\Support\MessageBag对象,不存在就生成一个空的MessageBag对象(避免模板调用$errors时出现变量未定义错误)
    • 最后调用view()->share('errors', $messageBag)方法,把这个对象全局共享给所有当前请求要渲染的视图

你可以直接看这个中间件的核心源码,逻辑非常清晰:

public function handle($request, Closure $next)
{
    view()->share('errors', $request->session()->get('errors', new MessageBag));

    return $next($request);
}
  1. 模板直接调用
    Blade模板渲染时可以直接读取全局共享的$errors变量,不需要在每个控制器方法里单独传参,所以@foreach ($errors->all() as $error)代码可以直接运行。

注意:如果用的是api路由组,默认不会注册这个中间件,所以api路由对应的视图里不会自动生成$errors变量,需要手动处理。

内容的提问来源于stack exchange,提问作者wlv9320

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 10:33:00