abstem/invites

基于邀请的会员系统

0.0.1 2017-11-06 00:34 UTC

This package is not auto-updated.

Last update: 2024-09-25 09:19:47 UTC


README

Invites 通过使用邀请码限制对 Laravel 应用的访问。

邀请码

  • 可供任何人使用(非常适合在社交媒体上分享)。
  • 可以有限次数的使用或无限使用。
  • 可以设置过期日期,或者永不过期。

安装

您可以使用 composer 拉取此包

$ composer require abstem/invites

然后,在 Laravel 中注册服务提供者(5.5 版本无需注册)

// config/app.php
'providers' => [
    ...
    Abstem\Invites\InvitesServiceProvider::class,
];

并且,注册外观

// config/app.php
'aliases' => [
    ...
    'Invites'   =>  Abstem\Invites\Facades\Invites::class,
];

最后,迁移数据库

$ php artisan migrate

使用方法

生成邀请

创建一个通用的邀请码,使用 1 次且无过期时间。

Invites::generate()->make();

创建 5 个通用的邀请码,每个使用 1 次,且无过期时间。

Invites::generate()->times(5)->make();

创建一个使用 10 次且无过期时间的邀请。

Invites::generate()->uses(10)->make();

创建一个在特定日期过期的邀请。

$date = Carbon::now('UTC')->addDays(7);
Invites::generate()->expiresOn($date)->make();

创建一个在 14 天后过期的邀请。

Invites::generate()->expiresIn(14)->make();

兑换邀请

您可以通过调用 redeem 方法来兑换邀请。提供邀请码和可选的电子邮件地址。

Invites::redeem('ABCDE');

如果邀请能成功兑换邀请码,它会增加 1 次兑换次数,否则会抛出异常。

  • 如果代码在数据库中不存在,则抛出 InvalidInviteCode
  • 如果设置了过期日期并且它已经过去,则抛出 ExpiredInviteCode
  • 如果邀请码已经被使用最大次数,则抛出 MaxUsesReached

以上所有异常都继承自 InvitesException,因此您可以在应用程序不需要对上述异常做任何特定处理的情况下捕获该异常。

try {
    Invites::redeem(request()->get('code'), request()->get('email'));
} catch (InvitesException $e) {
    return response()->json(['error' => $e->getMessage()], 422);
}

检查邀请而不兑换

您可以通过调用 check 方法来检查邀请。提供邀请码和可选的电子邮件地址。(它的签名与 redeem 方法相同,但会返回 truefalse 而不是抛出异常。)

Invites::check('ABCDE');

更改错误信息(和翻译支持)

为了更改邀请返回的错误信息,我们需要像这样发布语言文件

$ php artisan vendor:publish --tag=translations

语言文件将位于 /resources/lang/vendor/invites/en,您可以编辑 messages.php 文件,这些信息将被邀请使用。您可以通过在 /resources/lang/vendor/invites 目录中创建包含 messages.php 文件的额外文件夹来支持其他语言,例如在 de 文件夹中放置您的德语翻译。(阅读本地化文档以获取更多信息。)

配置 - 更改表名

首先发布包配置

$ php artisan vendor:publish --tag=config

config/invites.php 中您将看到

return [
    'invite_table_name' => 'invites',
];

如果您更改表名并运行迁移,邀请将使用新的表名。

控制台

要删除已使用和过期的邀请,您可以使用 cleanup 命令

$ php artisan invites:cleanup