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

Laravel中不使用URL或表单如何将视图变量传递到控制器

实现方案

Laravel的控制器方法会先于视图渲染执行,视图循环内的$k是视图渲染阶段才生成的变量,不可能反向传入已经执行完成的控制器方法。不需要通过URL传参,直接在控制器预先统计所有状态的包裹数量再传给视图即可,修改代码如下:

1. 修改控制器代码

function total_parcels()
{
    // 预先统计所有0-2状态的包裹数量,键为status值,值为对应数量
    $statusCounts = DB::table('parcels')
        ->selectRaw('status, count(*) as count')
        ->whereIn('status', [0,1,2])
        ->groupBy('status')
        ->pluck('count', 'status')
        ->toArray();
    
    // 补全没有记录的状态,数量默认为0
    foreach([0,1,2] as $status) {
        if (!isset($statusCounts[$status])) {
            $statusCounts[$status] = 0;
        }
    }

    return view('dashboard', ['status_counts' => $statusCounts]);
}

2. 修改视图代码

@php
$status_arr = array("Item Accepted by Courier","Collected","Shipped");
@endphp

@foreach($status_arr as $k =>$v)
<!-- Parcel stages -->
<div class="col-xl-3 col-md-6 mb-4">
    <div class="card border-left-warning shadow h-100 py-2">
        <div class="card-body">
            <div class="row no-gutters align-items-center">
                <div class="col mr-2">
                    <div class="text-xs font-weight-bold text-warning text-uppercase mb-1">
                        {{$v}}
                    </div>
                    <div class="h5 mb-0 font-weight-bold text-gray-800">
                        {{ $status_counts[$k] }}
                    </div>
                </div>
                <div class="col-auto">
                    <i class="fas fa-bicycle fa-2x text-gray-300"></i>
                </div>
            </div>
        </div>
    </div>
</div>
@endforeach

3. 路由代码无需修改

路由保持原有逻辑即可:

Route::get('dashboard', [DashboardController::class, 'total_parcels']);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 08:54:02