2017-07-25 92 views
0

我有Cart()按鈕在頁面的頂部,它存儲和顯示用戶購物車的產品數量。在未登錄的用戶中也可以看到,他們可以將產品放在購物車中。在Laravel 4.2中,這個工作很完美,但我已經遷移到Laravel 5.4,沒有我遇到過這個問題。購物車會話和顯示購物車中的物品數量返回undefined在Laravel

這是函數

protected function setupLayout() 
{ 

    $user = self::getCurrentUser();  
    View::share('user', $user); 

    // this is the part which cause error 
    View::share('cartCount', count(Session::get('cart', array()))); 
} 

public static function isLoggedIn() 
{ 
    $user = Auth::user(); 
    if ($user !== null) { 
     return true; 
    } else { 
     return false; 
    } 
} 

這我有我的觀點

@if(!Auth::check()) 

    <li><a href="{{ URL::to('/cart') }}">Cart ({{ $cartCount }})</a></li> 

@else 

    <li><a href="{{ URL::to('/cart') }}">Cart ({{ $cartCount }})</a></li> 

@endif 

錯誤

未定義的變量:cartCount

任何我deas爲什麼這個版本可以在4.2版本上運行,但是不能在版本5.4 Laravel上運行?

dd(Session::get('cart', array())) return Array()如果購物車中沒有產品,這是正確的。當有產品顯示在陣列中時。

我敢肯定,有產品在購物車,因爲dd(Session::get('cart', array()))回報

array:2 [▼ 
    2 => array:5 [▶] 
    227 => array:5 [▶] 
] 
+0

你在哪裏定義'setupLayout'和'isLoggedIn'? – madpoet

+0

'isLoggedIn'有問題。 'setupLayout'沒有被使用。應該刪除。對不起,它已被刪除 – Ivan

+0

setupLayout沒有被使用?這可能是問題,因爲那是你分享變量的地方:) – madpoet

回答

1

我想你可以試試這個:

@if(!Auth::check()) 

    <li><a href="{{ URL::to('/cart') }}">Cart ({{ isset($cartCount) ? $cartCount : 0}})</a></li> 

@else 

    <li><a href="{{ URL::to('/cart') }}">Cart ({{ isset($cartCount) ? $cartCount : 0}})</a></li> 

@endif 

更新

protected function setupLayout() 
{ 

    $user = self::getCurrentUser(); 

    $data = array(
    'user' => $user, 
    'cartCount' => count(Session::get('cart', array())), 
    );  
    View::share('data', $data); 


} 

@if(!Auth::check()) 

    <li><a href="{{ URL::to('/cart') }}">Cart ({{ $data['cartCount']}})</a></li> 

@else 

    <li><a href="{{ URL::to('/cart') }}">Cart ({{ $data['cartCount']}})</a></li> 

@endif 

希望這對你的工作!

+0

像其他答案一樣。這隻會使頁面加載,但如果我把物品放入購物車仍然顯示'0' – Ivan

+0

我已更新問題'dd(Session :: get('cart',array()))'response,確保裏面有產品。 – Ivan

+0

如果我直接在刀片中使用'({{count(Session :: get('cart',array()))}})'它顯示正確的數字。 – Ivan

1

請更新到{{$ cartCount或 '0'}}。因此,如果當用戶第一次加載頁面時未設置變量,它將顯示0,並且不會出現任何錯誤。

+0

這個'{{$ cartCount? '0':$ cartCount}}'retunr同樣的錯誤。 – Ivan

+0

請嘗試我在我的回答中說的話。 {{$ cartCount or'0'}} –

+0

頁面正在加載。但是,當我將它們添加到購物車中時,不會顯示多少產品。總是顯示'0' – Ivan