pepeverde / cart
Requires
- php: >=5.6
Requires (Dev)
- friendsofphp/php-cs-fixer: ~2.10
- mockery/mockery: ~0.0
- phpunit/phpunit: ^5.5 | ^6.5
README
一个灵活的现代购物车包。
先决条件
- PHP >=5.6.0
安装
composer require pepeverde/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(如果由于更新而更改,则返回)。
$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
方法确定项目是否存在于购物车中。返回true
或false
。
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
。
此包提供了 2 个基本的存储实现:Cart\Storage\SessionStore
和 Cart\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]); } }