处理购物车中的身份验证用户

时间:2019-05-28 06:55:25

标签: php laravel

我编写了购物车代码并将其存储在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;


    }

   }

我在哪里处理身份验证用户?在这种情况下,当一个用户将商品添加到购物车中时,这些商品也会显示给另一用户:(请提供解决方案

1 个答案:

答案 0 :(得分:0)

您可以使用userId使其唯一。像下面这样

$request->session()->put('cart'.$userId, $cart);

当您需要购买该购物车时,如下所示。

return Session::get('cart'.$userId)->totalQty;

现在让我解释一下。

我只是将userIdcart串联在一起,因此它变得唯一。 当第一个用户登录时,我需要得到他的购物车。所以我就在下面。

Session::get('cart'.Auth::id())->totalQty;

这就是您将仅获得相关用户的购物车的方式。

您还可以使用一些laravel购物车包。让我知道您是否需要在评论部分。