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

