为了账号安全,请及时绑定邮箱和手机立即绑定

无法在 Laravel 中向会话添加多个对象

无法在 Laravel 中向会话添加多个对象

PHP
德玛西亚99 2021-12-24 09:37:58
当我尝试将商品添加到购物车时,它只会添加一次,如果我再次尝试添加它,它会覆盖它并且商品计数器保持为 1。我尝试从按钮切换到链接,尝试过不同的路由,以及其他人解决类似问题的方法,我也尝试过使用 push 方法而不是 put(当我尝试在会话中保存内容时),但它不起作用,因为它是一个关联数组。我得出的结论是,问题很可能出在控制器文件中。我的控制器public function getAddToCart(Request $request, $id){    $burgeri = Burgeri::find($id);    $oldCart = Session::has('cart') ? Session::get('cart') : null;    $cart = new Cart($oldCart);    $cart->add($burgeri, $burgeri->id);    $request->session()->put('cart',$cart);    return redirect()->route('burgeri.index');}购物车.phpclass Cart{    public $items = null;    public $totalQuantity = 0;    public $totalPrice = 0;    public function __constructor($oldCart)    {        if ($oldCart) {            $this->items = $oldCart->items;            $this->totalQuantity = $oldCart->totalQuantity;            $this->totalPrice = $oldCart->totalPrice;        }    }    public function add($item, $id)    {        $storedItem = ['quantity' => 0, 'price' => $item->price, 'item' => $item];        if ($this->items) {            if (array_key_exists($id, $this->items)) {                $storedItem = $this->items[$id];            }        }        $storedItem['quantity']++;        $storedItem['price'] = $item->price * $storedItem['quantity'];        $this->items[$id] = $storedItem;        $this->totalQuantity++;        $this->totalPrice += $item->price;    }}The Blade View<button class="cool_btn" onclick="window.location='{{route('burgeri.addToCart', ['id' => $burgeri->id]) }}'">    Add to Cart</button>这就是我显示计算购物车中商品数量的计数器的方式。<li class="nav-item">    <a class="nav-link" href="{{ url('Cart') }}">        <i class="fa fa-shopping-cart"></i>        Cart        <span class="badge badge-secondary">{{Session::has('cart') ? Session::get('cart')->totalQuantity : ''}}</span>    </a></li>当我使用:dd($request->session()->get('cart'));方法时,我得到了正确的项目及其参数,但我不知道为什么计数器不工作,它以某种方式重置本地存储的购物车,这是我的猜测。感谢您阅读本文,任何帮助表示赞赏。
查看完整描述

2 回答

?
白猪掌柜的

TA贡献1893条经验 获得超10个赞

当您在函数回调中传递对象时,无需传递项目的 id


$cart->add($burgeri); 

然后停止覆盖$storedItem功能


public function add($item)

{

    $storedItem=['item'=>$item, 'quantity'=>1];

    if($this->items)

    {

       if(array_key_exists($item->id, $this->items))

       {

          $storedItem['quantity']++;

       }

    }

    $storedItem['price']=$item->price * $storedItem['quantity'];

    $this->items[$id]=$storedItem;

    $this->totalQuantity++;

    $this->totalPrice+=$item->price;

}


查看完整回答
反对 回复 2021-12-24
?
qq_花开花谢_0

TA贡献1835条经验 获得超7个赞

我很抱歉,但事实证明我写错了构造函数......它的构造不是构造函数,其他一切都按预期工作


查看完整回答
反对 回复 2021-12-24
  • 2 回答
  • 0 关注
  • 169 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号