我编写了购物车代码并将其存储在Session中,现在我想单独处理Auth用户购物车
这是Cart.php
namespace App;
class Cart
{
public $items=null;
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){
$storedItems = ['qty'=>0,'price'=>$item->price,'item'=>$item];
if ($this->items){
if (array_key_exists($id,$this->items)){
$storedItems = $this->items[$id];
}
}
$storedItems['qty']++;
$storedItems['price'] = $item->ucp * $storedItems['qty'];
$this->items[$id] = $storedItems;
$this->totalQty++;
$this->totalPrice += $item->ucp;
}
}
这是购物车控制器
namespace App\Http\Controllers;
use App\Cart;
use App\Models\CartDetail;
use App\Models\Order;
use App\Models\Product;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Session;
class CartController extends Controller
{
public function addToCart(Request $request)
{
$id = $request->product_id;
$product = Product::find($id);
$oldCart = Session::has('cart') ? Session::get('cart') : null;
$cart = new Cart($oldCart);
if ($request->get_quantity) {
while ($request->get_quantity > 0) {
$cart->add($product, $product->id);
$request->get_quantity--;
}
} else {
$cart->add($product, $product->id);
}
$request->session()->put('cart', $cart);
return Session::get('cart')->totalQty;
}
}
我在哪里处理身份验证用户?在这种情况下,当一个用户将商品添加到购物车中时,这些商品也会显示给另一用户:(请提供解决方案
答案 0 :(得分:0)
您可以使用userId使其唯一。像下面这样
$request->session()->put('cart'.$userId, $cart);
当您需要购买该购物车时,如下所示。
return Session::get('cart'.$userId)->totalQty;
现在让我解释一下。
我只是将userId
与cart
串联在一起,因此它变得唯一。
当第一个用户登录时,我需要得到他的购物车。所以我就在下面。
Session::get('cart'.Auth::id())->totalQty;
这就是您将仅获得相关用户的购物车的方式。
您还可以使用一些laravel购物车包。让我知道您是否需要在评论部分。