粗俗 / 存储
此非官方的Laravel扩展包允许将任何模型添加到可实例化的“购物车”、“报价”或其他“篮子”中。
v1.0.0
2024-02-28 01:09 UTC
Requires (Dev)
- laravel/pint: dev-main
- orchestra/testbench: 8.x-dev
- phpstan/phpstan: 1.11.x-dev
This package is auto-updated.
Last update: 2024-09-28 03:06:16 UTC
README
概述
存储是一个非官方的Laravel扩展包,旨在处理Laravel应用程序中篮子和篮子项的管理。它提供了一种灵活且可扩展的解决方案,用于处理购物车、愿望单和其他类似用例。出于粒度目的,此包有意避免了定价和结账功能,专注于篮子内项目的管理。如果您正在寻找基于数量的价目单功能,请关注我即将推出的vulgar/price包。
安装
要将Stow包集成到您的Laravel项目中,请执行
composer require vulgar/stow
然后,发布和迁移数据库表
php artisan vendor:publish --provider="Vulgar\Stow\StowProvider"
php artisan migrate
配置
在config/stow.php
中定义篮子实例和限制,以确保类型安全和完整性
return [ 'instances' => [ 'cart' => [Product::class, Item::class], // Additional instances... ], ];
未列出的实例将不受限制,接受任何Stowable
模型。
创建篮子
实例化一个篮子,指定一个可选的类型(实例名称)
$cart = new Basket('cart'); // restricted to Product and Item (see stow.php config) $wishlist = new Basket(); // Unrestricted, any item implementing Stowable interface
向篮子中添加项目
将可存储接口添加到任何模型中,以允许它们被添加到篮子中
class Product implements Stowable { // ... }
添加遵守实例限制和选项的项目
$product = new Product(); $cart->add($product, 1, ['size' => 'M', 'color' => 'blue']); $item = new Item(); // Assume this class implements Stowable as well $cart->add($item, 2); // Service has not been explicitly allowed in the 'cart' instance (see stow.php config) $service = new Service(); $cart->add($service); // Throws UnstowableObjectException $wishlist->add($service); // instances without restrictions can accept any Stowable
如果项目已存在于篮子中,并且具有相同选项,则只有当项目存在时,其数量才会增加。
$basketItem1 = $cart->add($product); // new product added because options don't match, quantity in cart is 1 $basketItem2->add($product, 3, ['size' => 'M', 'color' => 'blue']); // product with same options already in cart, quantity incremented and is now 3
更新篮子项目
更新篮子中的项目详情,这需要BasketItem或其ID
$cart->change($basketItem, 3, ['size' => 'L']); // Update quantity and options
从篮子中删除项目
通过BasketItem或ID从篮子中删除项目
$cart->remove($basketItem);
检索篮子项目
从篮子中检索项目
$basketItems = $cart->basketItems->with('stowable')->get(); // group items by stowable type $grouped = $basketItems->groupBy('stowable_type'); // filter items by stowable class $filtered = $basketItems->filter(function($item) { return $item->stowable instanceof Product; }); // iterate over items foreach($basketItems as $basketItem) { $stowable = $basketItem->stowable; // ... }
合并篮子
将一个篮子的内容合并到另一个篮子中
$wishlist->merge($cart);
克隆篮子
克隆一个篮子和其相关项目
$clone = $wishlist->clone();
删除篮子
删除篮子和其相关项目
$cart->delete();
详细事件概述
以下是对事件、它们提供的对象以及如何使用它们的概述
1. BasketCreatedEvent
- 包含对象:
$basket
(新创建的篮子实例) - 用法:您可以使用此事件在创建新的篮子后执行操作,例如记录、自定义通知或与其他系统集成。
2. BasketUpdatedEvent
- 包含对象:
$basket
(更新的篮子实例) - 用法:此事件允许您响应篮子的更新,启用诸如审计、触发业务工作流程或更新相关数据之类的操作。
3. BasketDeletedEvent
- 包含对象:
$basket
(已删除的篮子实例) - 用法:对于清理相关资源或在删除后执行操作非常重要。内置监听器使用此来删除相关篮子项目,但您可以扩展功能以满足其他需求。
4. BasketItemCreatedEvent
- 包含对象:
$basketItem
(新添加的篮子项目实例) - 用法:用于跟踪篮子中添加的内容非常有用,例如更新库存或基于新的篮子内容触发推荐。
5. BasketItemUpdatedEvent
- 包含对象:
$basketItem
(更新的篮子项目实例) - 用法:利用此事件处理篮子项的变化,例如调整库存水平、重新计算篮子总计或应用其他业务规则。
6. BasketItemDeletedEvent
- 包含对象:
$basketItem
(被移除的购物车项目实例) - 用法:此事件可用于与BasketItemUpdatedEvent类似的操作,但具体用于响应项目删除。
创建和注册自定义监听器
要为这些事件中的任何一个创建自定义监听器,请使用Artisan命令生成监听器
php artisan make:listener YourCustomListener --event=BasketUpdatedEvent
在你的自定义监听器中,你可以访问事件对象及其属性
namespace App\Listeners; use Vulgar\Stow\Events\BasketUpdatedEvent; class YourCustomListener { public function handle(BasketUpdatedEvent $event) { $basket = $event->basket; // Access the updated basket // Implement your custom logic here } }
在EventServiceProvider
中注册你的监听器
protected $listen = [ 'Vulgar\Stow\Events\BasketUpdatedEvent' => [ 'App\Listeners\YourCustomListener', ], ];
最佳实践和潜在问题
- 确保正确配置实例以防止意外的项目类型。
- 利用事件在应用程序中同步购物车状态。
- 在使用大型购物车时监控性能,并考虑缓存策略。