xdrop / laravel-promocodes
:package_description
Requires
- php: ^8.1
- illuminate/broadcasting: ^9.0|^10.0
- illuminate/console: ^9.0|^10.0
- illuminate/container: ^9.0|^10.0
- illuminate/database: ^9.0|^10.0
- illuminate/queue: ^9.0|^10.0
- illuminate/support: ^9.0|^10.0
Requires (Dev)
- nunomaduro/larastan: ^2.0
- orchestra/testbench: ^7.1|^8.5
- pestphp/pest: ^1.21|2.8
- pestphp/pest-plugin-laravel: ^1.2|^2.0
- pestphp/pest-plugin-mock: ^1.0|^2.0
- phpunit/phpunit: ^9.0|^10.1
- dev-release/9.0
- 10.0.0
- 9.1.0
- 9.0.0
- 8.1.2
- 8.1.1
- 8.1.0
- 8.0.0
- 2.3.3
- 2.3.2
- 2.3.1
- 2.3.0
- 2.2.1
- 2.2.0
- 2.1.2
- 2.1.1
- 2.1.0
- 2.0.3
- 2.0.2
- 2.0.1
- 2.0.0
- 1.2.0
- 1.1.0
- 1.0.1
- 1.0.0
- 0.5.4
- 0.5.1
- 0.4.2
- 0.4.1
- 0.4.0
- 0.3.0
- 0.2.2
- 0.2.1
- 0.2.0
- 0.1.5
- 0.1.4
- 0.1.3
- 0.1.2
- 0.1.1
- 0.1.0
- dev-dependabot/composer/guzzlehttp/psr7-2.5.0
- dev-dependabot/composer/symfony/http-kernel-6.2.6
- dev-89-validation-promo-code
- dev-bugfix/88-typehint-causing-issues-with-custom-user-model
- dev-main
- dev-release/8.0
- dev-release/5.1
This package is not auto-updated.
Last update: 2024-09-28 18:00:12 UTC
README
laravel-promocodes
Laravel优惠券和促销码生成器。当前版本仅适用于 Laravel 9.x 和 PHP 8.1。它是完全重写的,如果您使用的是之前的版本,您需要相应地更改您的代码。代码现在更加简化,您可能需要几分钟时间来完成整个重写。
注意:当前版本已完全重写。如果您发现了一些在先前版本中可以实现的某些功能,欢迎提出问题。希望这个新版本将更容易使用,并且将为您提供更好的功能以满足您的需求。
安装
您可以通过composer安装此包
composer require zgabievi/laravel-promocodes
配置
php artisan vendor:publish --provider="Zorb\Promocodes\PromocodesServiceProvider"
现在您可以根据需要更改配置
return [
'models' => [
'promocodes' => [
'model' => \Zorb\Promocodes\Models\Promocode::class,
'table_name' => 'promocodes',
'foreign_id' => 'promocode_id',
],
'users' => [
'model' => \App\Models\User::class,
'table_name' => 'users',
'foreign_id' => 'user_id',
],
'pivot' => [
'model' => \Zorb\Promocodes\Models\PromocodeUser::class,
'table_name' => 'promocode_user',
],
],
'code_mask' => '****-****',
'allowed_symbols' => 'ABCDEFGHIJKLMNOPQRSTUVWXYZ123456789',
];
配置此文件后,运行迁移
php artisan migrate
现在您需要在您的用户模型上使用AppliesPromocode。
namespace App\Models;
use Illuminate\Foundation\Auth\User as Authenticatable;
use Zorb\Promocodes\Traits\AppliesPromocode;
class User extends Authenticatable {
use AppliesPromocode;
//
}
使用方法
使用非常简单。方法已合并,因此您可以轻松地配置促销码。
参考
| 名称 | 说明 |
|---|---|
| 掩码 | 星号将被随机符号替换 |
| 字符 | 可用于掩码替换的符号 |
| 多次使用 | 定义单个代码是否可以被同一用户多次使用 |
| 无限 | 生成的代码将有无限的使用次数 |
| 绑定到用户 | 定义促销码是否只能由一个用户使用,如果用户最初未分配,则第一个用户将被绑定到促销码 |
| 用户 | 定义最初绑定到促销码的用户 |
| 数量 | 应生成的唯一促销码数量 |
| 使用次数 | 促销码可以使用的次数 |
| 过期 | 促销码应该过期的日期时间。null表示促销码将永远不会过期 |
| 详细信息 | 在应用时检索的详细信息的数组 |
创建促销码
使用类
根据需要组合方法。您可以跳过任何不需要的方法,其中大多数已经具有默认值。
use Zorb\Promocodes\Facades\Promocodes;
Promocodes::mask('AA-***-BB') // default: config('promocodes.code_mask')
->characters('ABCDE12345') // default: config('promocodes.allowed_symbols')
->multiUse() // default: false
->unlimited() // default: false
->boundToUser() // default: false
->user(User::find(1)) // default: null
->count(5) // default: 1
->usages(5) // default: 1
->expiration(now()->addYear()) // default: null
->details([ 'discount' => 50 ]) // default: []
->create();
使用助手
有一个全局助手函数,它将与促销码类做相同的事情。您可以使用PHP 8.1的命名参数魔术。
createPromocodes(
mask: 'AA-***-BB', // default: config('promocodes.code_mask')
characters: 'ABCDE12345', // default: config('promocodes.allowed_symbols')
multiUse: true, // default: false
unlimited: true, // default: false
boundToUser: true, // default: false
user: User::find(1), // default: null
count: 5, // default: 1
usages: 5, // default: 1
expiration: now()->addYear(), // default: null
details: [ 'discount' => 50 ] // default: []
);
使用命令
还有一个用于创建促销码的命令。这里的参数也是可选的。
php artisan promocodes:create\
--mask="AA-***-BB"\
--characters="ABCDE12345"\
--multi-use\
--unlimited\
--bound-to-user\
--user=1\
--count=5\
--usages=5\
--expiration="2022-01-01 00:00:00"
生成促销码
如果您想输出促销码而不是将它们保存到数据库中,您可以调用generate方法而不是create。
use Zorb\Promocodes\Facades\Promocodes;
Promocodes::mask('AA-***-BB') // default: config('promocodes.code_mask')
->characters('ABCDE12345') // default: config('promocodes.allowed_symbols')
->multiUse() // default: false
->unlimited() // default: false
->boundToUser() // default: false
->user(User::find(1)) // default: null
->count(5) // default: 1
->usages(5) // default: 1
->expiration(now()->addYear()) // default: null
->details([ 'discount' => 50 ]) // default: []
->generate();
应用促销码
使用类
根据需要组合方法。您可以跳过任何不需要的方法。
use Zorb\Promocodes\Facades\Promocodes;
Promocodes::code('ABC-DEF')
->user(User::find(1)) // default: null
->apply();
使用助手
有一个全局助手函数,它将与促销码类做相同的事情。
applyPomocode(
'ABC-DEF',
User::find(1) // default: null
);
使用命令
还有一个用于应用促销码的命令。
php artisan promocodes:apply ABC-DEF --user=1
异常
在尝试应用促销码时,您应该注意异常。代码的大部分在出现问题时都会抛出异常
// Zorb\Promocodes\Exceptions\*
PromocodeAlreadyUsedByUserException - "The given code `ABC-DEF` is already used by user with id 1."
PromocodeBoundToOtherUserException - "The given code `ABC-DEF` is bound to other user, not user with id 1."
PromocodeDoesNotExistException - "The given code `ABC-DEF` doesn't exist." | "The code was not event provided."
PromocodeExpiredException - "The given code `ABC-DEF` already expired."
PromocodeNoUsagesLeftException - "The given code `ABC-DEF` has no usages left."
UserHasNoAppliesPromocodeTrait - "The given user model doesn't have AppliesPromocode trait."
UserRequiredToAcceptPromocode - "The given code `ABC-DEF` requires to be used by user, not by guest."
事件
在应用时将触发两个事件。
// Zorb\Promocodes\Events\*
GuestAppliedPromocode // Fired when guest applies promocode
// It has public variable: promocode
UserAppliedPromocode // Fired when user applies promocode
// It has public variable: promocode
// It has public variable: user
过期促销码
使用助手
有一个全局助手函数可以过期促销码。
expirePromocode('ABC-DEF');
使用命令
还有一个用于过期促销码的命令。
php artisan promocodes:expire ABC-DEF
特质方法
如果您将AppliesPromocode特质添加到您的用户模型中,您将在用户上获得一些附加方法。
$user = User::find(1);
$user->appliedPromocodes // Returns promocodes applied by user
$user->boundPromocodes // Returns promocodes bound to user
$user->applyPromocode('ABC-DEF') // Applies promocode to user
其他方法
Promocodes::all(); // To retrieve all (available/not available) promocodes
Promocodes::available(); // To retrieve valid (available) promocodes
Promocodes::notAvailable(); // To retrieve invalid (not available) promocodes
测试
composer test
贡献
有关详细信息,请参阅 CONTRIBUTING。
致谢
许可
麻省理工学院许可证(MIT)。请参阅许可文件获取更多信息。
