php - 无法在 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'));
方法时,我得到了正确的项目及其参数,但我不知道为什么计数器不工作,它以某种方式重置本地存储的购物车,这是我的猜测。
感谢您阅读本文,感谢您提供任何帮助。
解决方案
当您在函数回调中传递对象时,无需传递项目的 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;
}
推荐阅读
- ruby-on-rails - Docker-compose 给出 URI::InvalidURIError:postgresql 方案不接受注册表部分:$DB_USER:$DB_PASSWORD@$DB_HOST:port (orbad hostname?)
- ios - 防止 UIButton.imageView 按图像调整大小
- r - 使用聚合并保留 NA 行
- python - 屏蔽多维 NumPy 数组
- android - 无法将 mp3 文件从内部存储播放到媒体播放器
- angular - 子节点的angularfire集合平面图
- mysql - 如何将 1D mysql 表“展平”或“折叠”成 2D?
- javascript - 在选择框中填充 optgroup 上的选项,选项数据相互覆盖
- ios - Objective-C 生成的接口头和 CocoaPods
- sql - 执行 SQL 任务中的存储过程不持久化对数据库的更改