mykholy / shopping-cart
适用于Laravel的易于使用的购物车
Requires
- php: ^7.3|^8.0|^8.1|^8.2
- ext-json: *
- illuminate/config: ^6.0|^7.0|^8.0|^9.0|^10.0
- illuminate/database: ^6.20.26|^7.30.5|^8.40.0|^9.0|^10.0
- illuminate/support: ^6.0|^7.0|^8.0|^9.0|^10.0
Requires (Dev)
- orchestra/testbench: ^4.0|^5.0|^6.0|^7.0|^8.0
- phpunit/phpunit: ^8.0|^9.0|^10.0
README
这是一个适用于Laravel 6/7/8的简单购物车实现。它将您的购物车自动序列化到数据库,并加载相关的产品模型。
用法
要开始,请将 Buyable 接口添加到您的模型中。
use Illuminate\Database\Eloquent\Model; use Mykholy\ShoppingCart\Buyable; use Mykholy\ShoppingCart\BuyableTrait; class Product extends Model implements Buyable { use BuyableTrait; }
确保您实现了 getBuyableDescription 和 getBuyablePrice 方法,分别带有相应的产品描述和产品价格。
现在您可以向购物车添加产品。
use Mykholy\ShoppingCart\Facades\Cart; $product = Product::create(['name' => 'Pizza Slice', 'price' => 1.99]); $quantity = 2; Cart::add($product, $quantity);
要检索购物车内容
Cart::content(); // or Cart::items();
要检索总计
Cart::subtotal();
您可以更新购物车中某个项目的数量。第一个参数是相关 CartItem 的主键。
$item = Cart:content()->first(); Cart::update($item->id, $item->quantity + 5);
或者完全删除该项目。
Cart::remove($item->id);
选项
要将特定于项目的选项(如尺寸或颜色)添加到购物车中的某个项目,首先在您的 Buyable 实例中注册可用的选项。
class Product extends Model implements Buyable { // ... public function getOptions(): array { return [ 'size' => ['18 inch', '36 inch'], 'color' => ['white', 'blue', 'black'], ]; } }
然后,您只需将关联数组作为 Cart::add 的第三个参数传递。
Cart::add($product, 3, ['color' => 'white']);
任何无效的选项都将静默地从数组中删除。
您还可以通过调用 Cart::updateOption 来添加或更改购物车中当前项目的选项。
$item = Cart:content()->first(); // Update a single option Cart::updateOption($item->id, 'color', 'black'); // Update multiple options at once Cart::updateOptions($item->id, [ 'color' => 'black', 'size' => '36 inch', ]);
选项数组将在 CartItem 实例上作为 $item->options 可用。
附加到用户
您可以将购物车实例附加到用户,以便检索之前会话中的购物车。通过调用 attachTo 方法并将 Illuminate\Contracts\Auth\Authenticatable 的实例传递进来,来实现将购物车附加到用户。
class RegisterController { /** * The user has been registered. * * @param \Illuminate\Http\Request $request * @param mixed $user * @return mixed */ protected function registered(Request $request, $user) { Cart::attachTo($user); } }
然后当用户登录时,您可以调用 loadUserCart 方法,再次传递用户实例。
class LoginController { /** * The user has been authenticated. * * @param \Illuminate\Http\Request $request * @param mixed $user * @return mixed */ protected function authenticated(Request $request, $user) { Cart::loadUserCart($user); } }
依赖注入
如果您不是门面派,您可以通过类型提示 Mykholy\ShoppingCart\CartManager 类或 Mykholy\ShoppingCart\CartContract 接口来使用容器注入购物车实例。
税
购物车可以计算购物车中项目的总税额。只需调用
$rate = 13; // The tax rate as a percentage Cart::tax($rate);
您还可以在包含的配置文件中设置默认税率。
// config/shopping-cart.php 'tax' => [ 'rate' => 6, ],
然后只需调用 Cart::tax 而不带参数。
Cart::tax();
如果您的某些项目适用不同的税率或免税,没问题。首先修改配置文件
// config/shopping-cart.php 'tax' => [ 'mode' => 'per-item', ],
然后,通过实现 Taxable 接口并定义 getTaxRate 方法来设置每个项目的税率。
use Mykholy\ShoppingCart\Taxable; class Product extends Model implements Buyable, Taxable { /** * Calculate the tax here based on a database column, or whatever you will. * * @return int|float */ public function getTaxRate() { if ($this->tax_rate) { return $this->tax_rate; } if (! $this->taxable) { return 0; } return 8; }
现在当调用 Cart::tax 时,您的项目将应用其自定义税率。
安装
您可以通过composer安装此包
composer require mykholy/shopping-cart
要发布配置文件和迁移,运行
php artisan vendor:publish --provider="Mykholy\ShoppingCart\CartServiceProvider"
并运行包含的数据库迁移。
php artisan migrate
测试
composer test
入门(演示)仓库
如果您想查看使用此购物车的入门/演示实现,请查看我们的 laravel-commerce 仓库
路线图
我还没完成的事情
- 当会话销毁时清除未附加到用户的购物车实例。
- 添加一个Artisan命令来清除任何未附加的购物车(这两个可能互斥)
- 当调用
loadUserCart时,添加配置购物车合并策略的能力
鸣谢
- 由 Avraham Appel 创建
- 初始开发由 Bomshteyn Consulting 赞助
- 受 LaravelShoppingcart 包 的启发,该包由 @Crisane 提供
许可证
MIT 许可证 (MIT)。请参阅许可证文件以获取更多信息。
Laravel 包模板
此包是使用 Laravel 包模板 生成的。