armezit / lunarphp-purchase-limit
月球电子商务购买限制插件
Requires
- php: ^8.0
- livewire/livewire: ^2.0
- lunarphp/lunar: ^0.8
- spatie/laravel-package-tools: ^1.9.2
Requires (Dev)
- laravel/pint: ^1.0
- nunomaduro/collision: ^6.0
- nunomaduro/larastan: ^2.0.1
- orchestra/testbench: ^7.0
- pestphp/pest: ^1.21
- pestphp/pest-plugin-laravel: ^1.1
- phpstan/extension-installer: ^1.1
- phpstan/phpstan-deprecation-rules: ^1.0
- phpstan/phpstan-phpunit: ^1.0
- phpunit/phpunit: ^9.5
README
月球购买限制插件允许你在Lunar商店中定义复杂的购买限制场景。
功能
你可以为每个规则定义一个标准。目前,你可以定义以下购买限制:
- 特定产品
- 特定产品变体
- 特定客户或客户组
- 特定客户或客户组的特定产品
- 特定客户或客户组的特定产品变体
每个购买限制规则都允许你限制数量、金额(总计)或两者。
快速设置
通过composer安装Lunar购买限制
composer require armezit/lunarphp-purchase-limit
使用以下命令运行迁移
php artisan migrate
使用方法
默认情况下,在快速设置后,你可以开始为产品和客户定义购买限制。如果你需要更多定制,还有一个详细的安装指南。
检测定义的限制违规
当检测到定义的限制违规时,该包会抛出一个Lunar\Exceptions\Carts\CartException
异常的子类型。
通常,你希望在创建订单过程中捕获这些异常
use Lunar\Facades\CartSession; use Lunar\Exceptions\Carts\CartException; use Armezit\Lunar\PurchaseLimit\Exceptions\PurchaseLimitException; use Armezit\Lunar\PurchaseLimit\Exceptions\CustomerQuantityLimitException; try { $order = CartSession::current() ->getManager() ->createOrder(); // catch any CartException } catch (CartException $e) { ... // catch any kind of purchase limit violation } catch (PurchaseLimitException $e) { ... // catch specific kind of purchase limit violation } catch (CustomerQuantityLimitException $e) { // customer quantity limit exceeded }
产品购买限制(槽位)
产品购买限制槽位将允许你为特定产品定义限制。
在以下示例中,我们已为产品A
定义了限制规则
- 任何客户都允许在每个
周
内最多购买10
个产品单位。 - 零售组客户在每个
购买
中允许购买最多2000
的总计产品金额。例如,如果产品价格为500美元,他们只能在每个订单中购买最多4个单位的产品A
。
默认情况下,你将在产品编辑页面的底部找到此槽位。但是,你可以在配置文件中更改此默认位置。
客户购买限制(槽位)
客户购买限制槽位将允许你为特定客户或客户组定义限制。
待办事项:尚未实现!
高级使用
架构
主要组件是Rule
类,它检查定义的限制(存储在数据库中),并在检测到规则违规时抛出异常。
有两种类型的规则实现了CartRuleInterface
或CartLineRuleInterface
合同。
每个规则只执行一种独特的检查。
例如,CustomerProductLimit
规则仅检查特定客户在特定产品上的购买限制。
而CustomerLimit
规则仅检查特定客户在任意产品上的购买限制,而ProductLimit
规则仅检查任何客户在特定产品上的购买限制;等等。
这些规则被注入到购物车/购物车行修改器管道中。
因此,每次你尝试调用CreateOrder
操作时,这些规则都会逐个执行,并在检测到定义的限制违规时抛出异常。
复杂规则
尽管有中心槽位用于定义典型限制,但直接在数据库中保存购买限制并不会阻止你通过保存购买限制来组合更复杂的规则。
查看PurchaseLimit模型。
扩展
此外,您可以通过实现 CartRuleInterface
和/或 CartLineRuleInterface
合约来扩展/修改业务逻辑,并将它们注入到修饰符管道中。
实现新的 CheckVeryComplexLimit
规则后,将其添加到配置文件中对应的管道
'cart_rules' => [ ... CheckVeryComplexLimit::class, ],
或者
'cart_line_rules' => [ ... CheckVeryComplexLimit::class, ],
安装
快速安装 涵盖了基本的安装步骤。然而,本节提供了详细的安装过程,包含所有可选部分。
您可以通过 composer 安装此软件包
composer require armezit/lunarphp-purchase-limit
迁移
可选地,发布迁移
php artisan vendor:publish --tag="lunarphp-purchase-limit-migrations"
使用以下命令运行迁移
php artisan migrate
::: tip 表名是可以配置的。请参阅配置文件。
配置
您可以使用以下命令发布配置文件
php artisan vendor:publish --tag="lunarphp-purchase-limit-config"
这是已发布的配置文件的内容
return [ /* * List of rules to check during CartModifier::calculated() hook */ 'cart_rules' => [ ProductLimit::class, CustomerLimit::class, CustomerProductLimit::class, ], /* * List of rules to check during CartLineModifier::calculated() hook */ 'cart_line_rules' => [ ProductVariantLimit::class, CustomerProductVariantLimit::class, ], /* * Automatically register purchase-limit`s cart/cart-line modifiers during PurchaseLimitServiceProvider boot * Set it to false, if you want to manually register cart/cart-line modifiers */ 'register_cart_modifiers' => true, /* * Automatically register purchase-limit admin hub slots * Set it to false, if you want to manually register them */ 'register_hub_slots' => true, /* * The name (handle) of hub slot which you want to display product purchase limit component */ 'product_purchase_limit_slot' => 'product.all', 'database' => [ 'purchase_limits_table' => 'purchase_limits', ], ];
翻译 & 视图
可选地,您可以使用以下命令发布翻译和视图
php artisan vendor:publish --tag="lunarphp-purchase-limit-translations" php artisan vendor:publish --tag="lunarphp-purchase-limit-views"
服务提供商
默认情况下,当安装此软件包时,它会自动注册其服务提供商。
如果出于任何原因您更喜欢手动注册,则应将软件包服务提供商添加到您的 Laravel 应用程序的 config/app.php
文件中。
// ... 'providers' => [ // ... Armezit\Lunar\PurchaseLimit\PurchaseLimitServiceProvider::class, Armezit\Lunar\PurchaseLimit\PurchaseLimitHubServiceProvider::class, ],
PurchaseLimitServiceProvider
引导主要软件包功能,而 PurchaseLimitHubServiceProvider
用于注册一些将在 Lunar Admin Hub 中使用的 槽位。
测试
composer test
变更日志
请参阅 变更日志 以获取有关最近更改的更多信息。
贡献
请参阅 贡献指南 以获取详细信息。
安全漏洞
请查看我们关于如何报告安全漏洞的 安全策略。
鸣谢
许可证
MIT 许可证 (MIT)。请参阅 许可证文件 以获取更多信息。