damjangkae / cart
Requires
- php: >=7.0
- illuminate/database: 5.5.*
- illuminate/events: 5.5.*
- illuminate/session: 5.5.*
- illuminate/support: 5.5.*
Requires (Dev)
- fzaninotto/faker: ~1.4
- orchestra/testbench: ~3.0
- phpunit/phpunit: 6.0
This package is not auto-updated.
Last update: 2024-09-20 03:52:25 UTC
README
为 Laravel 构建的一个简单的购物车。
安装
-
下载此存储库并将其放置在
packages
-
将路径添加到
composer.json
composer require damjangkae/cart
- 将以下行添加到
config/app.php
。
- 在
providers
数组中
Damjangkae\Cart\CartServiceProvider::class
- 在
aliases
数组中
'Cart' => Damjangkae\Cart\Facades\Cart::class
- 执行
composer dump-autoload
。
完成。
概述
查看以下主题之一以了解有关 LaravelShoppingcart 的更多信息
用法
以下是提供的方法
Cart::add()
$book = Book::find(1); Cart::add($book);
通过模型 Book
必须实现 Damjangkae\Cart\Contracts\Buyable
,它需要以下方法
public function getIdentifier(); public function getPrice(): float;
函数 getIdentifier()
预期模型返回 ID 或使您的项目独特的某些内容。
使用 add()
的另一种可选方式。
使用可选参数
Cart::add($book, 2, 100, ['author' => 'John Doe']);
或作为次要参数的数组中的参数
Cart::add($book, [ 'quantity' => 2, 'price' => 100, 'attributes' => ['author' => 'John Doe'] ]);
Cart::update()
要更新购物车中的项目,您必须指定标识符。
$identifier = '9790404436093'; Cart::update($identifier, 2);
使用 update()
将现有数据覆盖为新的,与依赖于现有数据的 add()
不同。示例
Cart::add($book1, 2); Cart::update($book1, 3); // The total will be 3 Cart::add($book2, 2); Cart::add($book2, 3); // The total will be 5
使用 update()
的另一种方式。
与 add()
做的相同。
Cart::update($identifier, ['price' => 900]);
Cart::remove()
$identifier = '9790404436093'; Cart::remove($identifier);
注意:将项目数量更新为 0 与 remove()
有相同的结果。
Cart::find()
与 update()
和 remove()
一样简单
$identifier = '9790404436093'; Cart::find($identifier);
Damjangkae\Cart\Exceptions\ItemNotFoundException
将在项目不存在时抛出。
Cart::items()
返回购物车中的项目集合
Cart::items();
Cart::destroy()
删除购物车对象。
Cart::destroy();
Cart::subtotal()
返回小计价格。
Cart::subtotal();
Cart::total()
Cart::subtotal();
Cart::count()
按类型返回项目数量。 2 本书和 3 把椅子将返回 2
Cart::count();
Cart::quantity()
按所有数量的项目返回项目数量。 2 本书和 3 把椅子将返回 5
Cart::quantity();
Cart::isEmpty()
如果购物车没有项目,则返回 true
。
Cart::isEmpty();
Cart::search()
传递闭包函数并执行您的操作。
Cart::search(function (CartItem $cartItem) { return $cartItem->price > 1000; });
注意:返回的结果在集合中。
集合
大多数方法都返回为集合(Illuminate\Support\Collection
),所以您知道该怎么做。
Cart::items()->first();
Cart::search(function (CartItem $cartItem) { return $cartItem->price > 1000; })->count();
请参阅 Laravel 的集合以获取更多信息:[https://laravel.net.cn/docs/master/collections](https://laravel.net.cn/docs/master/collections)
实例
您可能希望在同一会话中拥有多个购物车实例,这里是解决方案。
$book1 = Book::find(1); $book2 = Book::find(2); Cart::instance('gift')->add($book1); Cart::instance('wishlist')->add($book2); Cart::instance('gift')->items()->first(); // book1 Cart::instance('wishlist')->items()->first(); // book2
注意:如果未设置实例名称,则默认值为以 default
预先添加的 cart_
。因此,如果您将实例名称设置为 wishlist
,则会话名称将为 cart_whishlist
。
条件
每个电子商务都有一项促销活动,因此让购物车在幕后做这项工作。
首先:创建您的条件类。
如果您的条件会影响 总价格,请确保您实现了 Damjangkae\Cart\Conditions\TotalAffectable
,但如果您的条件会影响 项目,则必须实现 Damjangkae\Cart\Conditions\ItemAffectable
。
**示例**:如果您想对订单小计超过 500 的客户提供 10% 的折扣。
<?php use Damjangkae\Cart\Cart; use Damjangkae\Cart\Conditions\TotalAffectable; class TenPercentOffIfSubtotalOver500Baht implements TotalAffectable { public function allow(Cart $cart): bool { return true; } public function active(Cart $cart): bool { return $cart->subtotal > 500; } public function getDiscount(Cart $cart): float { return $cart->subtotal * .1; } }
如您所见,您必须实现 3 个方法,它们是
-
allow()
预期您返回一个布尔值,如果返回true
,则此条件可以添加到购物车中。如果返回false
,则将抛出Damjangkae\Cart\Exceptions\ConditionIsNotAllowToAddException
。 -
active()
预期您返回一个布尔值,如果返回true
,则此条件是活动的。 -
getDiscount()
预期您返回一个浮点数,这将是小计的折扣。
示例:如果您希望如果客户购物车中有这本书,就免费赠送另一本书。
<?php use Damjangkae\Cart\Cart; use Damjangkae\Cart\CartItem; use Damjangkae\Cart\Conditions\ItemAffectable; class FreeAnotherBookIfTheBookInCart implements ItemAffectable { public function allow(Cart $cart): bool { return true; } public function active(Cart $cart): bool { $book = App\Book::find(1); return $cart->items->has($book->getItentifier()); } public function getItem(Cart $cart): CartItem { $anotherBook = App\Book::find(2); return new CartItem($anotherBook, 1, 0); } }
附加方法getItem
期望您返回Damjangkae\Cart\CartItem
,其创建方式与您在Cart::add()
中执行的方式相同。如果您想免费赠送,请确保将价格设置为0。
最后示例:如果您希望购物车中只有一个条件。
public function allow(Cart $cart): bool { return $cart->conditions->count() == 0; }
步骤二:将条件添加到购物车。
您必须提供条件键,例如10% 折扣
来识别您的条件。
Cart::addCondition('10% off', new TenPercentOffIfSubtotalOver500Baht);
最终:亲眼见证魔法。
Cart::add($book, 1, 1000); Cart::addCondition('10% off', new TenPercentOffIfSubtotalOver500Baht); Cart::subtotal(); // 1000 Cart::total(); // 900
存储到数据库
您可能希望将数据存储到数据库中,例如用户喜欢在机器上购物。
存储
\Cart::add($book1); \Cart::addCondition('10% off', new TenPercentOffIfSubtotalOver500Baht); \Cart::store('user_1');
恢复
\Cart::restore('user_1'); \Cart::items()->first(); // $book1
注意:恢复数据库中的记录后,将删除
也可以与实例一起工作
\Cart::instance('user_1')->add($book1); \Cart::instance('user_2')->add($book2); \Cart::instance('user_1')->store('test_1'); \Cart::instance('user_2')->store('test_2');