【问题标题】:laravel 5.3 session accessing for shopping cartlaravel 5.3 购物车会话访问
【发布时间】:2016-11-25 17:18:17
【问题描述】:

每次我按下添加到购物车按钮时,旧购物车都会替换新购物车,而不是将新商品添加到旧购物车中,并且如果存在,它不会更新数量。以下是代码和图像。

我的 Cart.php 模型

class Cart{

public $spares=null;
public $totalQuantity=0;
public $totalPrice=0;

public function __construct($oldCart){
    if($oldCart){
        $this->spares=$oldCart->spares;
        $this->totalPrice=$oldCart->totalQuantity;
        $this->totalQuantity=$oldCart->totalQuantity;
    }
    else{
        $this->spares=null;
    }

}

public function add($spare,$id){
     $storedItem=['qty' => 0,'price'=>$spare->price,'item'=>$spare];
    if($this->spares){
        if(array_key_exists($id,$this->spares)){
            $storedItem=$this->spares[$id];
        }
    }
    $storedItem['qty']++;
    $storedItem['price']= $spare->price*$storedItem['qty'];
    $this->spares[$id]=$storedItem;
    $this->totalQuantity++;
    $this->totalPrice+=$spare->price;
}

}

我的路线

Route::get('/addToCart/{id}',['uses'=>'searchController@getAddToCart',
'as'=>'product.addToCart'] );

我的控制器

 public function getAddToCart(Request $request,$id){
     $spares=Spares::find($id);
     $oldCart=Session::has('cart')? Session::get('cart'):null;
     $cart=new Cart($oldCart);
     $cart->add($spares,$spares->id);

     $request->session()->put('cart',$cart);
     dd($request->session())->get('cart');
     return redirect()->back();

 }

这是我目前得到的会话图像,我不知道这个 Store 对象是什么。我无法通过名称“购物车”访问

我应该得到的方式如下

这是 dd 方法中的所有会话对象如何仅访问购物车部分?

非常感谢您。

【问题讨论】:

    标签: php session laravel-5 session-variables


    【解决方案1】:

    使用session()->push() 而不是session()->put()

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

    Laravel documentation put 将覆盖以前的数据,push 将向会话数组添加新值。

    【讨论】:

    • 我使用的是 laravel 6.9,我遇到了同样的问题。以上方法无效。
    【解决方案2】:

    滑动这部分

    dd($request->session())->get('cart');
    

    因为它会重置您的购物车会话。 像这样使用这个函数

    public function AddCart(Request $request, $id)
    {
    
        $product = Product::find($id);
        if($request->session()->exists('cart'))
        {
          $oldCart = $request->session()->get('cart');
        }
        else
        {
            $oldCart=false;
        }
    
        $Cart = new Cart($oldCart);
        $Cart->Add($product, $id);
        $request->session()->put('cart',$Cart);
        return redirect()->back();
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-09-27
      • 2011-08-18
      相关资源
      最近更新 更多