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

Laravel中携带数据重定向至指定标签页的问题排查

我来帮你搞定这两个问题——POST提交后数据没正确加载,还有标签页的切换~

核心问题分析

你用redirect()->with()把POST处理后的数据存在了session闪存里,但重定向后触发的是GET请求,你的控制器直接走了else分支,用的还是默认的"default data",完全没去读取session里存的处理后数据!

解决方案

1. 修改控制器,读取session闪存数据

把你的index方法改成这样,让GET请求优先读取重定向带来的处理后数据,没有的话再用默认值:

public function index(Request $request){ 
    $method = $request->isMethod('post'); 
    if($method){ 
        $members = $projects = "some data"; 
        return redirect()->route('progress_reports')
            ->with(['projects' => $projects, 'members' => $members])
            ->withInput(['tab'=>'progress_report']);
    }else{ 
        // 优先从session取重定向的闪存数据,无数据则用默认值
        $projects = session('projects', "default data"); 
        $members = session('members', "default data"); 
        $results = Project::all(); 
        return view('reports.index', compact('projects', 'members', 'results')); 
    } 
}

session('key', 'default')的逻辑是:如果session里存在对应key的值,就用它;不存在则使用后面的默认值——这样重定向回来的GET请求就能拿到POST处理后的$projects和$members了。

2. 优化标签页切换JS

你的标签页切换代码最好包在$(document).ready()里,确保DOM完全加载后再执行,避免出现找不到元素的情况:

$(document).ready(function() {
    $('#tabMenu a[href="#{{ old('tab') }}"]').tab('show');
});

因为你已经用withInput(['tab'=>'progress_report'])把标签页标识存在了old input里,old('tab')能正确拿到progress_report,页面加载后就会自动切换到目标标签页。

总结

本质问题就是重定向后的数据存在session里,但你之前的控制器没去读取,而是直接用了默认值。修改后,GET请求会优先使用session里的处理后数据,没有的话再回退到默认值,完美解决数据加载的问题~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 04:32:03