mykholy/shopping-cart

适用于Laravel的易于使用的购物车

v1.0.0 2023-06-01 16:02 UTC

This package is auto-updated.

Last update: 2024-09-30 01:47:00 UTC


README

Software License Latest Version on Packagist Total Downloads Build Status StyleCI Scrutinizer Code Quality

这是一个适用于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;
}

确保您实现了 getBuyableDescriptiongetBuyablePrice 方法,分别带有相应的产品描述和产品价格。

现在您可以向购物车添加产品。

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 时,添加配置购物车合并策略的能力

鸣谢

许可证

MIT 许可证 (MIT)。请参阅许可证文件以获取更多信息。

Laravel 包模板

此包是使用 Laravel 包模板 生成的。