购物车数量未更新

时间:2019-08-19 19:11:42

标签: php laravel session

我正在关注Laravel的购物车教程,但是即使我已经将他的代码复制到了重点,也无法像在教程上那样工作。每次您点击产品时,购物车数量应该增加,但没有增加。

我正在关注Max Schwarzmueller的“ Laravel购物车”的教程,您可以在YouTube上找到https://www.youtube.com/watch?v=56TizEw2LgI&list=PL55RiY5tL51qUXDyBqx0mKVOhLNFwwxvH。 我被困在#8。

我是php,laravel和session的新手。我试过使用立面(例如Session :: put),而不是“ $ request-> session()-> put('cart',$ cart)“。 使用“ dd(session()-> all())”打印会话可以确认已将正确的商品添加到阵列购物车中。

在ProductController.php中

<?php

namespace App\Http\Controllers;

use Session;
use App\Http\Controllers;
use App\Product;
use App\Cart;
use Illuminate\Http\Request;

class ProductController extends Controller
{
    public function getIndex()
    {
        $products = Product::all();
        return view('shop.index', ['products' => $products]);
    }

    public function getAddToCart(Request $request, $id){
        $product = Product::find($id);

        //check in session if cart already contains product
        $oldCart = Session::has('cart') ? Session::get('cart') : null;

        //if it did contain products, pass them to constructor
        $cart= new Cart($oldCart);

        $cart->add($product, $product->id);

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

        return redirect()->route('product.index');
    }
}

在Cart.php中

<?php

namespace App;

use Session;

class Cart 
{
    public $items = Array();
    public $totalQty = 0;
    public $totalPrice = 0;

    public function _construct($oldCart){
        if($oldCart){
            $this->items = $oldCart->items;
            $this->totalQty = $oldCart->totalQty;
            $this->totalPrice = $oldCart->totalPrice;
        }
    }

    public function add($item, $id) {
        //default values if item not in cart 
        $storedItem = [
            'qty' => 0,
            'price' => $item->price,
            'item' => $item
        ];

        //if item is already in shopping cart
        if($this->items) {
            if(array_key_exists($id, $this->items) ) {
                $storedItem = $this->items[$id];
            }
        }

        $storedItem['qty']++;
        $storedItem['price'] = $item->price * $storedItem['qty'];
        $this->items[$id] = $storedItem;
        $this->totalQty++;
        $this->totalPrice += $item->price;
    }
}

每次我单击产品时,它都会激活ProductController的getAddtoCart函数

<a href="{{ route('product.addToCart', ['id'=> $product->id]) }}">Order</a>

我希望每次我单击每种产品的“订购”时,购物车的totalQty应该增加。 如果我在Poke Ball的“订购”上单击两次,则该特定商品(ID为1)的“数量”也应增加。
但是totalQty从0开始,但增量不超过1。另外,特定项目的qty仍为1。

1 个答案:

答案 0 :(得分:1)

花点时间找我,但事实证明这是一个简单的语法错误,使所有内容一无所有。购物车的构造函数使用单个下划线定义,应使用双下划线定义。

由于PHP不需要使用构造函数,因此您合并旧/新购物车的代码根本没有运行。 https://stackoverflow.com/a/455929/296555

// Wrong
public function _construct($oldCart){
   ...
}

// Right
public function __construct($oldCart){
   ...
}