我正在檢索在會話中添加到購物車的專案,并計算專案的總數。我創建了一個陣列,這些專案被添加到其中,我用它來顯示購物車。我獲取購物車中的商品數量并在每個視圖中顯示該數量。我已經制定了代碼,但到目前為止,使其作業的唯一方法是將其復制并粘貼到每條路線中。研究表明使用中間件是在所有視圖之間共享變數的方法,但我一直無法讓它作業。
首先,這是中間件的代碼。
<?php
namespace App\Http\Middleware;
use Closure;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Session;
use Illuminate\Support\Facades\View;
use App\Models\Item;
class GetCart
{
/**
* Handle an incoming request.
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
* @return mixed
*/
public function handle(Request $request, Closure $next)
{
$response = $next($request);
$items = Item::all();
$cartItems = [];
for($i=0; $i < count($items); $i ){
if(null !== Session::get('cartItem'.$i)){
$item = Session::get('cartItem'.$i);
array_push($cartItems, $item);
}
};
$totalNum = 0;
for($i=0; $i < count($cartItems); $i ){
if(isset($cartItems[$i])){
$totalNum = $cartItems[$i]['quantity'];
}
}
View::share('cartItems', $cartItems);
View::share('totalNum', $totalNum);
return $response;
}
}
在 App\Http\Kernel.php 中,我將它添加到 $middleware 變數中,這使它在每次請求時自動加載。
protected $middleware = [
\App\Http\Middleware\GetCart::class
];
但是,我仍然無法檢索變數。它說“未定義的變數”。因此,對于我所缺少的內容,我將不勝感激,至于為什么我無法在所有視圖之間共享此變數。正如我所說,我可以通過將代碼復制并粘貼到每個路由中來使其作業,但我知道這不是正確的方法。
uj5u.com熱心網友回復:
這里的問題是您已經在中間件中處理回應。請參閱https://laravel.com/docs/8.x/middleware#middleware-and-responses 在深入應用程式之前需要它。然后應該在所有視圖中可用。
但我認為最好為購物車制作一個單獨的刀片 (cart.blade.php) 并將其包含在所有其他需要它的視圖中。然后為該購物車視圖創建一個新的視圖撰寫器類cartItems并totalNum在其中共享您的和。請參閱https://laravel.com/docs/8.x/views#view-composers
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/353152.html
