我正在关注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。
答案 0 :(得分:1)
花点时间找我,但事实证明这是一个简单的语法错误,使所有内容一无所有。购物车的构造函数使用单个下划线定义,应使用双下划线定义。
由于PHP不需要使用构造函数,因此您合并旧/新购物车的代码根本没有运行。 https://stackoverflow.com/a/455929/296555
// Wrong
public function _construct($oldCart){
...
}
// Right
public function __construct($oldCart){
...
}