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
相关产品推荐
相关产品推荐

