猿问

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

当我尝试将商品添加到购物车时,它只会添加一次,如果我再次尝试添加它,它会覆盖它并且商品计数器保持为 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');

}

购物车.php


class 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'));方法时,我得到了正确的项目及其参数,但我不知道为什么计数器不工作,它以某种方式重置本地存储的购物车,这是我的猜测。


感谢您阅读本文,任何帮助表示赞赏。


德玛西亚99
浏览 170回答 2
2回答

白猪掌柜的

当您在函数回调中传递对象时,无需传递项目的 id$cart->add($burgeri);&nbsp;然后停止覆盖$storedItem功能public function add($item){&nbsp; &nbsp; $storedItem=['item'=>$item, 'quantity'=>1];&nbsp; &nbsp; if($this->items)&nbsp; &nbsp; {&nbsp; &nbsp; &nbsp; &nbsp;if(array_key_exists($item->id, $this->items))&nbsp; &nbsp; &nbsp; &nbsp;{&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $storedItem['quantity']++;&nbsp; &nbsp; &nbsp; &nbsp;}&nbsp; &nbsp; }&nbsp; &nbsp; $storedItem['price']=$item->price * $storedItem['quantity'];&nbsp; &nbsp; $this->items[$id]=$storedItem;&nbsp; &nbsp; $this->totalQuantity++;&nbsp; &nbsp; $this->totalPrice+=$item->price;}

qq_花开花谢_0

我很抱歉,但事实证明我写错了构造函数......它的构造不是构造函数,其他一切都按预期工作
随时随地看视频慕课网APP
我要回答