此软件包已被废弃且不再维护。没有建议的替代软件包。

灵活且现代化的购物车软件包

v3.0.0 2017-01-04 21:04 UTC

This package is not auto-updated.

Last update: 2019-11-19 21:18:48 UTC


README

Packagist Build Status Scrutinizer Quality Score SensioLabs Insight Code Coverage Total Downloads License

灵活且现代化的购物车软件包。

先决条件

  • PHP >=5.6.0

安装

composer require mike182uk/cart

用法

购物车

创建新的购物车

要创建一个新的购物车实例,您必须向购物车构造函数传递一个id和一个存储实现

use Cart\Cart;
use Cart\Storage\SessionStore;

$id = 'cart-01';
$cartSessionStore = new SessionStore();

$cart = new Cart($id, $cartSessionStore);

存储实现必须实现 Cart\Storage\Store

id用于通过存储实现保存/恢复购物车状态。

向购物车添加项目

使用add方法向购物车添加项目。必须向此方法传递一个有效的Cart\CartItem

use Cart\CartItem;

$item = new CartItem;
$item->name = 'Macbook Pro';
$item->sku = 'MBP8GB';
$item->price = 1200;
$item->tax = 200;

$cart->add($item);

如果项目已存在于购物车中,则现有项目的数量将更新以包含添加的项目数量。

从购物车中删除项目

通过将项目id传递给remove方法从购物车中删除项目。

$cart->remove('e4df90d236966195b49b0f01f5ce360a356bc76b');

更新购物车中的项目

要更新购物车中项目的属性,请使用update方法。您需要传递购物车项目id、要更新的属性的名称以及新值。此方法将返回项目id(如果由于更新而更改,则返回项目id)。

$newId = $cart->update('e4df90d236966195b49b0f01f5ce360a356bc76b', 'price', 959.99);

如果您尝试更新购物车中不存在的项目,将抛出InvalidArgumentException

检索购物车中的项目

使用get方法通过其id检索购物车中的项目。如果项目不存在,则返回null

$item = $cart->get('e4df90d236966195b49b0f01f5ce360a356bc76b');

if ($item) {
    // ...
}

检索购物车中的所有项目

使用all方法检索购物车中的所有项目。这将返回包含购物车中所有项目的数组。

$cartItems = $cart->all();

if (count($cartItems) > 0) {
    foreach ($cartItems as $item) {
        // ...
    }
}

确定购物车中是否存在项目

使用has方法确定购物车中是否存在项目。返回truefalse

if ($cart->has('e4df90d236966195b49b0f01f5ce360a356bc76b')) {
    // ...
}

清除购物车

使用clear方法清除购物车。

$cart->clear();

这还将清除存储中此购物车的保存状态。

保存/恢复购物车状态

使用save方法保存购物车。

$cart->save();

这将保存当前购物车项目和购物车id到存储中。

使用restore方法恢复购物车。

$cart->restore();

这将把任何存储的购物车商品放回购物车,并设置购物车ID。如果在恢复购物车时出现问题,将抛出Cart\CartRestoreException异常。这只会发生在以下情况:

  • 保存的数据不可序列化
  • 反序列化的数据无效(不是数组)
  • 购物车ID未出现在反序列化的数据中
  • 购物车商品未出现在反序列化的数据中
  • 购物车ID无效(不是字符串)
  • 购物车商品无效(不是数组)

其他购物车方法

totalUniqueItems

获取购物车中独特商品的总数。

$cart->totalUniqueItems();
totalItems

获取购物车中商品的总数。

$cart->totalItems();
total

获取所有购物车商品(含税)的总价。

$cart->total();

您可以使用totalExcludingTax方法获取不含税的总价。

$cart->totalExcludingTax();
tax

获取所有购物车商品的总税额。

$cart->tax();
toArray

将购物车导出到数组。

$cartData = $cart->toArray();

数组将具有以下结构

[
    'id' => 'cart-01', // cart id
    'items' => [
        // cart items as array
    ]
]
getId

获取购物车的ID。

$cart->getId();
getStore

获取购物车存储实现。

$cart->getStore();

购物车商品

创建一个新的购物车商品

use Cart\CartItem;

$item = new CartItem;

$item->name = 'Macbook Pro';
$item->sku = 'MBP8GB';
$item->price = 1200;
$item->tax = 200;
$item->options = [
    'ram' => '8 GB',
    'ssd' => '256 GB'
];

Cart\CartItem实现了ArrayAccess,因此可以将属性分配给购物车商品,就像访问数组一样

$item = new CartItem;

$item['name'] = 'Macbook Pro';
$item['sku'] = 'MBP8GB';
$item['price'] = 1200;
$item['tax'] = 200;
$item['options'] = [
    'ram' => '8 GB',
    'ssd' => '256 GB'
];

也可以将数据数组传递给购物车商品构造函数来设置购物车商品属性

$itemData = [
    'name' => 'Macbook Pro';
    'sku' => 'MBP8GB';
    'price' => 1200;
    'tax' => 200;
    'options' => [
        'ram' => '8 GB',
        'ssd' => '256 GB'
    ]
];

$item = new CartItem($itemData);

如果未将数量传递给购物车商品构造函数,则默认数量设置为1

如果未将价格传递给购物车商品构造函数,则默认价格设置为0.00

如果未将税传递给购物车商品构造函数,则默认税设置为0.00

购物车商品ID

每个购物车都有一个唯一的ID。该ID是通过购物车商品上设置的属性生成的。您可以使用方法getId或通过访问属性id来获取购物车商品ID。

$id = $item->getId();
$id = $item->id;
$id = $item['id'];

更改购物车商品上的属性将更改其ID。

购物车商品方法

get

获取在购物车商品上设置的数据。

$name = $item->get('name');

这与执行以下操作相同

$name = $item['name'];
$name = $item->name;

set

在购物车商品上设置数据。

$item->set('name', 'Macbook Pro');

这与执行以下操作相同

$item['name'] = 'Macbook Pro';
$item->name = 'Macbook Pro';

如果您正在设置项目数量,则值必须是整数,否则将抛出InvalidArgumentException异常。

$item->quantity = 1; // ok

$item->quantity = '1' // will throw exception

如果您正在设置项目价格或税,则值必须是数字,否则将抛出InvalidArgumentException异常。

$item->price = 10.00; // ok

$item->price = '10' // ok

$item->price = 'ten' // will throw exception
getTotalPrice

获取购物车商品的总价(包括税)((商品价格 + 商品税) * 数量)

$item->getTotalPrice();

您还可以使用 getTotalPriceExcludingTax 方法获取不含税的总价 (商品价格 * 数量)

$item->getTotalPriceExcludingTax();
getSinglePrice

获取购物车商品的单价(包括税)(商品价格 + 商品税)

$item->getSinglePrice();

您还可以使用 getSinglePriceExcludingTax 方法获取不含税的单价。

$item->getSinglePriceExcludingTax();
getTotalTax

获取购物车商品的总税额 (商品税 * 数量)

$item->getTotalTax();
getSingleTax

获取购物车商品的单个税费值。

$item->getSingleTax();
toArray

将商品导出到数组。

$itemArr = $item->toArray();

数组将具有以下结构

[
    'id' => 'e4df90d236966195b49b0f01f5ce360a356bc76b', // cart item unique id
    'data' => [
        'name' => 'Macbook Pro',
        'sku' => 'MBP8GB',
        'price' => 1200,

        // ... other cart item properties
    ]
]

购物车存储实现

购物车存储实现必须实现 Cart\Storage\Store

此包提供了两种基本的存储实现:Cart\Storage\SessionStoreCart\Storage\CookieStore

当调用购物车的 save 方法时,购物车 ID 和序列化后的购物车数据会传递给存储实现的 put 方法。

当调用购物车的 restore 方法时,购物车 ID 会传递给存储实现的 get 方法。

当调用购物车的 clear 方法时,购物车 ID 会传递给存储实现的 flush 方法。

一个示例会话存储实现可能如下所示

use Cart\Store;

class SessionStore implements Store
{
    /**
     * {@inheritdoc}
     */
    public function get($cartId)
    {
        return isset($_SESSION[$cartId]) ? $_SESSION[$cartId] : serialize([]);
    }

    /**
     * {@inheritdoc}
     */
    public function put($cartId, $data)
    {
        $_SESSION[$cartId] = $data;
    }

    /**
     * {@inheritdoc}
     */
    public function flush($cartId)
    {
        unset($_SESSION[$cartId]);
    }
}