Laravel会话无法正常工作

时间:2016-11-26 17:16:08

标签: php laravel session

当我点击按钮时我需要增加变量的值,但值总是一个。我点击了按钮超过五次,但结果仍然是1.请查看附图。

我的购物车类

class Cart
{
    public $totalQuantity = 0;


    public function __construct($oldCart)
    {
        if ($oldCart) {

            $this->totalQuantity = $oldCart->totalQuantity;
        }

    }

    public function add()
    {
        $this->totalQuantity++;

    }
}

控制器方法

public function getAddToCart(Request $request,$id){
    $oldCart=null;
    //code that i added now to check which returns null
     dd($request->session()->get('cart'));

    if($request->session()->pull('cart')) {
        $oldCart=$request->session()->pull('cart') ;
    }

    $cart=new Cart($oldCart);
    $cart->add();

    $request->session()->push('cart',$cart);
    dd($request->session()->pull('cart'));

    return redirect()->back();
}

以下是图片

enter image description here

1 个答案:

答案 0 :(得分:0)

Laravel doc:

  

pull方法将从a中的会话中检索和删除项目   单一陈述

所以,如果你把它拉到if状态,那么第二次拉动没有任何东西可以提供给你,因为你已经删除了它:)。你应该使用get,或者直接在$ oldCart变量中使用。

哦,如果你使用push方法,它会被存储为一个数组,所以你的代码应该是这样的:

$oldCart = $request->session()->pull('cart');

if ($oldCart) {
    $cart = new Cart($oldCart[0]);
} else {
    $cart = new Cart(null);
}
$cart->add();

$request->session()->push('cart',$cart);

甚至更好:

$oldCart = null;

if ($request->session()->has('cart')) {
    $oldCart = $request->session()->get('cart');
}

$cart = new Cart($oldCart);
$cart->add();

$request->session()->put('cart',$cart);