2017-07-25 95 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