jamesdb/cart

一个与框架无关的购物车包。

0.3.0 2016-11-20 18:37 UTC

This package is not auto-updated.

Last update: 2024-09-28 18:16:01 UTC


README

Software License Build Status Coverage Status Quality Score Total Downloads

一个与框架无关的购物车包。

安装

通过Composer

$ composer require jamesdb/cart

备注

货币值对象

此包使用moneyphp/money(Martin Fowler的货币模式的实现)。由于浮点数不适合货币值,所以避免了使用浮点数。更多信息请参阅下面的链接

因此,在处理货币值时,您需要将它们表示为整数,而不是浮点数。

以下是一个示例。

use jamesdb\Cart\CartItem;

$item = new CartItem([
    ...
    'price' => 1099, // Instead of £10.99 or $10.99 etc.
    ...
]);

设置

要设置购物车实例,您需要将标识符和存储实现传递给购物车构造函数。

默认货币为'GBP',如果您想更改此设置,您需要将您选择的货币传递给setCurrency方法,如下所示。

可以通过setFormatterCallback设置自定义格式化回调,有关更多信息,请参阅moneyphp格式化程序

use jamesdb\Cart\Cart;
use jamesdb\Cart\Storage\NativeSessionDriver;
use Money\Currencies\ISOCurrencies;
use Money\Currency;
use Money\Formatter\DecimalMoneyFormatter;

$cart = new Cart('cart', new NativeSessionDriver);
$cart->setCurrency(new Currency('GBP'));

$cart->setFormatterCallback(function ($money) {
    $currencies = new ISOCurrencies();
    $moneyFormatter = new DecimalMoneyFormatter($currencies);

    return $moneyFormatter->format($money); // outputs in decimal format.
});

只要实现了jamesdb\Cart\Storage\StorageInterface,就可以使用任何存储实现。

用法

添加项目

CartItem实现了ArrayAccess,并使用__set__get魔术方法来分配和访问属性。

添加的项目将返回一个rowid。

use jamesdb\Cart\Cart;
use jamesdb\Cart\CartItem;

$cart = new Cart(...);

/**
 * Assign properties via __set.
 */
$item1 = new CartItem();
$item1->id = 2731;
$item1->name = 'Product';
$item1->price = 1099;
$item1->quantity = 1;

$cart->add($item1);

/**
 * ----------
 */

/**
 * Assign properties via ArrayAccess.
 */
$item2 = new CartItem([
    'id' => 2731,
    'name' => 'Product',
    'price' => 1099,
    'quantity' => 1
]);

$cart->add($item2)

更新项目

您可以使用购物车的update方法或直接在CartItem上访问属性。

尝试更新购物车中不存在的项目将导致抛出CartItemUpdateException

$cart->update('rowid', ['name' => 'Renamed Product']);

/**
 * ----------
 */

$cartItem = $cart->find('rowid');
$cartItem->name = 'Renamed Product';

删除项目

尝试删除购物车中不存在的项目将导致抛出CartItemRemoveException

$cart->remove('rowid');

清空购物车

$cart->clear();

访问特定项目

要访问特定项目,请使用购物车的getItem方法。

如果找不到项目,则方法将返回null

$cart->getItem('rowid');

访问所有项目

$cart->getItems();

过滤项目

购物车可以通过提供的任何键和值通过filter方法进行过滤。

// Return all items with a quantity of 2.
$cart->filter('quantity', 2);

// Return all items with a price of 1000.
$cart->filter('price', 1000);

访问项目数量

getTotalUniqueItems方法将返回一个不包括数量的项目数量。

$cart->getTotalUniqueItems();

getTotalItems方法将返回一个包括数量的项目数量。

$cart->getTotalItems();

购物车中内置了便利方法isEmpty,它通过=== 0检查代理到getTotalUniqueItems

$cart->isEmpty();

访问价格

使用getTotalPrice方法获取包括税在内的总价格。

$cart->getTotalPrice();

有时不需要处理税,在这种情况下,您可以使用getTotalPriceExcludingTax方法。

$cart->getTotalPriceExcludingTax();

获取总购物车税额。

$cart->getTax();

事件

League\Event内置在购物车中,并提供了一些可以发出的事件,这允许您轻松地在购物车生命周期的关键点上挂钩。

您可以通过将监听器附加到购物车上的addEventListener来订阅这些事件。

所有事件都有内置方法来检索触发事件的项和购物车本身。

$cart->addEventListener('cart.add', function ($event) {
    $item = $event->getItem();
    $cart = $event->getCart();

    ...
});

cart.add

$cart->addEventListener('cart.add', function ($event) {});

cart.update

$cart->addEventListener('cart.update', function ($event) {});

cart.remove

$cart->addEventListener('cart.remove', function ($event) {});