jimmitjoo / cart
一个简单的Laravel购物车。
dev-main
2021-11-12 16:54 UTC
Requires
- php: ^8.0
- illuminate/database: ^8.0
Requires (Dev)
- orchestra/testbench: ~5|~6
- phpunit/phpunit: ~9.0
This package is auto-updated.
Last update: 2024-09-12 23:22:55 UTC
README
我们需要PHP 8。
安装包。
composer require jimmitjoo/cart
发布配置和迁移。
php artisan vendor:publish --tag=laravel-cart
您可以配置自己的Cart和CartItem模型。
为此,您需要实现这两个模型的接口。
默认情况下,我们期望Cart和CartItem模型使用UUID作为标识符。
class Cart extends Model implements CartContract { use UsesUuids; }
class CartItem extends Model implements CartItemContract { use UsesUuids; }
创建新的购物车
例如,您可以创建一个新的购物车,用于某些原因尚未拥有购物车的用户。
要使用新的购物车,您应该将购物车的ID(UUID字符串)存储在某个地方。 $cart->id
$cart = (new CreateCartAction)->execute();
带有属性的创建新的购物车
例如,您可以创建一个属于系统特定用户的购物车。
$cartData = new CartData((int) $userId); $cart = (new CreateCartAction)->execute($cartData);
您还可以向购物车添加备注。例如,备注可以告诉您购物车是从哪里创建的或其他重要信息。Typehints仅用于澄清CartData对象期望的类型。
$cartData = new CartData((int) $userId, (string) $note); $cart = (new CreateCartAction)->execute($cartData);
向购物车添加产品
因此,有几种方法可以实现。
Purchasable 是一个您可以将它添加到任何模型中的特质,以允许用户购买。
$cart->addToCart(Purchasable $purchasable, int $amount = 1, int $discount = 0);
您可以连续添加多个产品。
$cart ->addToCart(Purchasable $purchasable) ->addToCart(Purchasable $purchasable);
或者,您可以通过自己创建CartItem并附加购物车ID来特别创建一个CartItem。
$cartItemData = new CartItemData( 1, // Amount of products. 300, // Current price (minus discount) of the product. 100, // The discount, 'Personalized product', // Custom product name null, // You could add a purchasable id here null, // And the purchasable type here $this->cart->id, // Add this item to a cart ); $cartItem = (new AddCartItemToCartAction)->execute($cartItemData);
更新购物车项
$cartItem = CartItem::find($existingItemId); $cartItemData = new CartItemData( 1, // Amount of products. 88, // Current price (minus discount) of the product. 12, // The discount, 'Updated product name', // Custom product name null, // You could add a purchasable id here null, // And the purchasable type here null, // We don't need to specify the cart on update... $cartItem->id, // ID of the item to update ); $cartItem = (new UpdateCartItemAction)->execute($cartItemData);
移除购物车项
$cartItemToRemove = CartItem::find($existingItemId); (new RemoveCartItemAction)->execute($cartItemToRemove);