minutemailer / laravel-honeypot
为 Laravel 提供灵活的积分系统
v1.0.0
2023-04-14 09:59 UTC
Requires
- php: >=8.1
- illuminate/console: >=10.0
- illuminate/database: >=10.0
- illuminate/queue: >=10.0
- illuminate/support: >=10.0
README
Honeypot 是一个简单的 Laravel 积分系统。使用 Honeypot,用户可以拥有积分桶,其中可以存入或取出积分。它非常适合创建简单的虚拟货币系统或实施奖励计划。
使用 Honeypot,您可以轻松管理用户的积分并跟踪所有交易。无论是构建电子商务平台还是社交网络,Honeypot 都可以轻松地将积分系统添加到您的 Laravel 应用程序中。
安装
您可以通过 composer 安装此软件包
composer require minutemailer/laravel-honeypot
HoneypotServiceProvider
将由 Laravel 自动发现并注册。
接下来,创建并运行数据库迁移
php artisan honeypot:migration:make php artisan migrate
最后,将 CanHaveCredits
特性添加到您的 User
模型中
use Minutemailer\Honeypot\Traits\CanHaveCredits; class User extends Authenticatable { use CanHaveCredits; }
用法
在 Honeypot 中,积分桶必须有一个名称,但您也可以选择为每个桶设置一个过期日期。如果没有设置过期日期,则桶将无限期地保持活动状态。此外,您还可以为每个桶设置一个有效期。
创建桶
要创建桶,请在 User
模型上使用 addCreditBucket
方法
$user->addCreditBucket('credits', [ 'expires_at' => now()->addYear(), // Optional, defaults to null 'valid_from' => now()->subYear(), // Optional, defaults to null 'amount' => 1000 // Optional, defaults to 0 ]);
名称对每个用户是唯一的,因此您不能为同一用户创建具有相同名称的两个桶。
存入积分
要将积分存入桶中,您需要通过名称选择桶,然后在该桶上调用 add
方法
$user->getCreditBucket('credits')->add(100);
使用积分
与存入积分相同,但使用 use
方法代替
$user->getCreditBucket('credits')->use(100);
使用积分将增加桶上的 used
列,同时保持 amount
列不变。
默认桶
根据您的应用程序,您可能希望利用默认桶。您可能只有一种类型的积分,但有多种类型的桶。例如,赚取的积分 和 购买的积分。默认桶是具有最短过期日期的桶。这有助于用户首先使用即将过期的积分。
因此,您可以使用此逻辑动态地从用户中提取积分
$creditsToWithdraw = 100; while ($creditsToWithdraw > 0) { $bucket = $user->getDefaultCreditBucket(); if ($bucket->amount > $creditsToWithdraw) { $bucket->use($creditsToWithdraw); $creditsToWithdraw = 0; } else { $creditsToWithdraw -= $bucket->amount; $bucket->use($bucket->amount); } }