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

Laravel old()函数失效问题:闪存功能停止工作

看起来你遇到的问题是Laravel的old()函数无法读取到闪存的输入数据,从你dump的Session结果来看,问题出在闪存数据的处理上——_flash数组里的old是空的,而new里只有_old_input这个标记,这说明输入数据虽然被闪存了,但没有被正确标记为“旧数据”供old()读取。

下面给你几个排查和解决的步骤:

  • 确保路由使用Web中间件组
    Laravel的Session和闪存功能依赖于web中间件组里的StartSession和ShareErrorsFromSession中间件。如果你的路由没有包含在web中间件里,这些核心功能就不会生效。检查你的路由定义,确保它在routes/web.php里(默认已经应用web中间件),或者手动指定中间件:

    Route::get('/units/{unit}/rents/create', [RentController::class, 'create'])
        ->middleware('web');
    
  • 检查重定向代码的正确性
    确保你在控制器里正确调用了withInput(),可以尝试显式传入请求数据:

    // 闪存所有输入字段
    return redirect()->back()->withInput($request->all());
    
    // 或者只闪存需要的字段
    return redirect()->back()->withInput($request->only('rent_date', 'amount'));
    

    避免在重定向前调用session()->flush()、session()->forget('_old_input')这类会清空Session的方法。

  • 验证视图里的old()使用是否正确
    确保视图里的表单字段name属性和你闪存的字段名完全一致,比如:

    <div class="form-group">
        <label for="amount">租金金额</label>
        <input type="number" name="amount" id="amount" value="{{ old('amount') }}" class="form-control">
    </div>
    
  • 检查Session驱动配置
    本地环境下默认的file驱动是没问题的,但如果你的config/session.php里driver设置成了array,那Session数据只会存在当前请求里,重定向后就会丢失。确保驱动设置为file、database或者其他持久化的驱动。

如果按照上面的步骤排查后还是有问题,可以尝试清除Session文件(storage/framework/sessions目录下的文件),然后重新测试。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 04:15:43