2016-11-26 19 views
0

ボタンをクリックしたときに変数の値を大きくする必要がありますが、その値は常に1です。私は5回以上ボタンをクリックしたが、結果は常に1.添付の画像を見てください。Laravel session not working

マイカートクラス

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

答えて

0

Laravelドキュメントです:

プル法が 単一文でセ​​ッションからアイテムを取得し、削除します

あなたがそれを引く場合は、すでにそれを削除したように、第2のプルよりstatetmentはあなたを提供するために何を持っていない場合: )。代わりにgetを使うか、$ oldCart変数で直接pullする必要があります。

もああ、あなたがプッシュ方式を使用している場合、あなたのコードは次のようになりますので、それが配列として格納されます。

$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); 
+0

まだ総量があります常に1つ。 redirect-> back()コマンドを使用するのは間違っていますか? – hEShaN

+0

私は上記のddメソッドを質問の編集で使用しました。私はボタンを2回以上押した後、カートの戻り値がnullであることを示しています。 – hEShaN

+0

dd()を使用すると、セッションはPHPの要求を破棄して保存されず、終了しません。それをエコーするようにしてください。 –