Laravel中在Trait内携带输入与变量实现重定向的问题
解决Laravel中Trait里使用
send()重定向丢失会话数据的问题 你遇到的这个问题核心原因是:直接调用send()方法会绕过Laravel框架的响应生命周期流程,导致你通过with()闪存的会话数据没有被正确存储到会话中。
问题拆解
当你构建redirect()->back()->with(...)的响应实例时,Laravel只是把要闪存的数据标记为待存入会话的状态,这些数据需要在响应正式发送之前,由框架的会话处理机制完成写入操作。但直接调用send()会直接输出响应内容,跳过了这个关键的会话保存步骤,所以前端页面自然拿不到这些会话数据。
可行解决方案
方案1:返回重定向响应(推荐)
在Trait里不要直接调用send(),而是返回这个重定向响应,让调用该Trait方法的控制器来接管响应发送流程,框架会自动处理会话闪存的保存:
if ($address_validation->isAmbiguous()) { $suggestedAddresses = $address_validation->getCandidateAddressList(); return redirect()->back()->with('suggestedAddresses', $suggestedAddresses)->withInput($request->all()); }
方案2:手动保存会话(若必须用send())
如果业务场景要求必须在Trait里直接发送响应,那需要在调用send()前手动触发会话保存:
if ($address_validation->isAmbiguous()) { $suggestedAddresses = $address_validation->getCandidateAddressList(); $redirectResponse = redirect()->back()->with('suggestedAddresses', $suggestedAddresses)->withInput($request->all()); // 手动保存会话数据,确保闪存内容写入存储 $request->session()->save(); $redirectResponse->send(); exit; // 发送响应后主动退出,避免后续代码执行干扰 }
完成以上调整后,前端就能正常通过session('suggestedAddresses')获取到你传递的地址数据了。
内容的提问来源于stack exchange,提问作者Ahmad Mukhtar
相关产品推荐
相关产品推荐

