通过 ShoppingCart 扩展包在 Laravel 5.2 中快速实现购物车功能

shopping-cart-laravel

1、安装

通过Composer安装扩展包

composer require syscover/shoppingcart dev-master

然后到config/app.phpproviders中注册服务提供者:

Syscover\Shoppingcart\ShoppingcartServiceProvider::class,

同时在aliases中注册门面:

'CartProvider' => Syscover\Shoppingcart\Facades\CartProvider::class,

发布扩展包的配置文件到config目录:

php artisan vendor:publish --provider="Syscover\Shoppingcart\ShoppingcartServiceProvider"

之后你可以运行PHPUnit单元测试:

phpunit tests/CartProviderTest

以测试扩展包是否有问题。

2、使用

ShoppingCart扩展包为我们操作购物车提供了丰富的方法。

添加到购物车

// 通过add方法添加
CartProvider::instance()->add('293ad', 'Product 1', 1, 9.99, array('size' => 'large'));

// 通过数组添加
CartProvider::instance()->(['id' => '293ad', 'name' => 'Product 1', 'qty' => 1, 'price' => 9.99, 'options' => array('size' => 'large')]);

// 批量添加
CartProvider::instance()->([
    array('id' => '293ad', 'name' => 'Product 1', 'qty' => 1, 'price' => 10.00),
    array('id' => '4832k', 'name' => 'Product 2', 'qty' => 1, 'price' => 10.00, 'options' => array('size' => 'large'))
]);

更新购物车

$rowId = 'da39a3ee5e6b4b0d3255bfef95601890afd80709';
//rowId是表示更新的购物车条目ID,第二个参数可以是数字用于表示更新后的数量,也可以是数组表示更新的属性
CartProvider::instance()->update($rowId, 2);
CartProvider::instance()->update($rowId, array('name' => 'Product 1'));

从购物车中移除

$rowId = 'da39a3ee5e6b4b0d3255bfef95601890afd80709';
CartProvider::instance()->remove($rowId);

获取购物车数据

//获取指定购物车条目数据
$rowId = 'da39a3ee5e6b4b0d3255bfef95601890afd80709';
CartProvider::instance()->get($rowId);

//获取购物车所有数据
CartProvider::instance()->content();

//获取总价(不包含运费)
CartProvider::instance()->subtotal();

//获取总价(包含运费)
CartProvider::instance()->total();

//获取购物车总条目数
CartProvider::instance()->count();

//搜索购物车是否包含指定条目
CartProvider::instance()->search(array('id' => 1, 'options' => array('size' => 'L')));

清空购物车

CartProvider::instance()->destroy();

更多使用方法请参考Syscover\Shoppingcart\Libraries\Cart类。

多个购物车实例

此外,本扩展包还支持多个购物车实例,你可以通过Cart::instance('newInstance')这种方式来指定实例名称:

CartProvider::instance('shopping')->add('192ao12', 'Product 1', 1, 9.99);

如果要切换,指定相应的实例名称即可:

Cart::instance('wishlist')->add('sdjk922', 'Product 2', 1, 19.95, array('size' => 'medium'));

默认的购物车实例名称是main,不指定实例名称时等同于使用main实例。

本节我们使用现成的扩展包来实现购物车,下一节我们将演示如何在Laravel中纯手工打造购物车功能。

学院君

学院君 has written 554 articles

资深PHP工程师,Laravel学院院长