jobmetric/laravel-membership

这是一个Laravel网站会员管理包,您可以在您的项目中使用。

1.2.0 2024-07-30 18:11 UTC

This package is auto-updated.

Last update: 2024-09-30 18:28:08 UTC


README

Contributors Forks Stargazers MIT License LinkedIn

laravel会员管理

这是一个Laravel网站会员管理包,您可以在您的项目中使用。

在此包中,您可以将任何模型或表中的成员或用户委托给它,无需再担心任何事情,此包有助于简化用户会员管理,您可以放心地将任何会员委托给它。

通过composer安装

运行以下命令以拉取最新版本

composer require jobmetric/laravel-membership

文档

要使用此包的服务,请按照以下说明操作。

在此包中,我们有两个特质类,必须连接到用户和成员模型的两端。

用户模型可以包含 useradmin 模型或我们想要包含在成员模型中的任何内容。

成员模型是一个希望任何用户成为成员的模型,例如 postproductorder 等。

例如,您需要将两个特质类连接到用户和订单模型。

用户模型

namespace App\Models;

use Illuminate\Foundation\Auth\User as Authenticatable;
use JobMetric\Membership\CanMember;

class User extends Authenticatable
{
    use CanMember;
}

订单模型

namespace App\Models;

use Illuminate\Database\Eloquent\Model;
use JobMetric\Membership\Contracts\MemberContract;
use JobMetric\Membership\HasMember;

class Order extends Model implements MemberContract
{
    use HasMember;
    
    /**
     * allow the member collection.
     *
     * @return array
     */
    public function allowMemberCollection(): array
    {
        return [
            'owner' => 'single',
            'members' => 'multiple'
        ];
    }
}

允许成员收集方法必须位于订单类中,我们定义在订单类中想要的集合。

owner 集合是一个只有一个成员的 single 集合,而 members 集合是一个可以有多个成员的 multiple 集合。

数组键的设计根据您模型字段的需求进行,您可以使用任何单词,但每个键前的值必须在 singlemultiple 之间选择。

single:表示集合中只能有一个成员。

multiple:表示集合中可以有多个成员。

现在我们已经将两个特质连接到提到的模型,现在我们可以使用它们的功能在订单模型中注册和获取用户会员信息。

HasMember 特质方法

members()

此方法返回订单模型的成员。

$order = Order::find(1);
$members = $order->members();

storeMember($person, $collection, $expired_at = null)

此方法在订单模型中存储成员。

$person:您想要存储在订单模型中的用户模型。

$collection:您想要在其中存储用户的集合。

$expired_at:会员的到期日期。如果您不指定此参数,则会员不会到期。

$order = Order::find(1);
$user = User::find(1);
$order->storeMember($user, 'members');

forgetMember($person, $collection)

此方法从订单模型中删除成员。

$person:您想要从订单模型中删除的用户模型。

$collection:您想要从中删除用户的集合。

$order = Order::find(1);
$user = User::find(1);
$order->forgetMember($user, 'members');

hasMember($person, $collection)

此方法检查用户是否是订单模型的成员。

$person:您想要检查是否是订单模型成员的用户模型。

$collection:您想要检查用户是否是集合成员的集合。

$order = Order::find(1);
$user = User::find(1);
$order->hasMember($user, 'members');

renewMember($person, $collection, $expired_at = null)

此方法在订单模型中更新用户的会员资格。

$person:您想要在订单模型中更新会员资格的用户模型。

$collection:您想要在集合中更新会员资格的集合。

$expired_at:会员的到期日期。如果您不指定此参数,则会员不会到期。

$order = Order::find(1);
$user = User::find(1);
$order->renewMember($user, 'members');

updateExpiredAtMember($person, $collection, $expired_at = null)

此方法更新订单模型中用户的会员资格到期日期。

$person:您想要更新订单模型中会员到期日期的用户模型。

$collection:您想要在其中更新会员到期日期的集合。

$expired_at:会员的到期日期。如果您不指定此参数,则会员不会到期。

$order = Order::find(1);
$user = User::find(1);
$order->updateExpiredAtMember($user, 'members');

getPerson($collection = null, $is_expired = false)

此方法返回订单模型的会员用户。

$collection:您想要从中获取用户的集合。如果您不指定此参数,则方法将返回订单模型的所有者。

$is_expired:如果您想获取已过期的会员,可以将此参数设置为true

$order = Order::find(1);
$order->getPerson('members');

CanMember trait 方法

persons()

此方法返回用户是会员的订单。

$user = User::find(1);
$orders = $user->persons();

storePerson($memberable, $collection, $expired_at = null)

此方法将用户存储在订单模型中。

$memberable:您想要在其中存储用户的会员模型。

$collection:您想要在其中存储用户的集合。

$expired_at:会员的到期日期。如果您不指定此参数,则会员不会到期。

$user = User::find(1);
$order = Order::find(1);
$user->storePerson($order, 'members');

forgetPerson($memberable, $collection)

此方法从订单模型中删除用户。

$memberable:您想要从中删除用户的会员模型。

$collection:您想要从中删除用户的集合。

$user = User::find(1);
$order = Order::find(1);
$user->forgetPerson($order, 'members');

hasPerson($memberable, $collection)

此方法检查用户是否是订单模型的成员。

$memberable:您想要检查用户是否是其会员的会员模型。

$collection:您想要检查用户是否是集合成员的集合。

$user = User::find(1);
$order = Order::find(1);
$user->hasPerson($order, 'members');

renewPerson($memberable, $collection, $expired_at = null)

此方法在订单模型中更新用户的会员资格。

$memberable:您想要在其中续订会员的会员模型。

$collection:您想要在集合中更新会员资格的集合。

$expired_at:会员的到期日期。如果您不指定此参数,则会员不会到期。

$user = User::find(1);
$order = Order::find(1);
$user->renewPerson($order, 'members');

updateExpiredAtPerson($memberable, $collection, $expired_at = null)

此方法更新订单模型中用户的会员资格到期日期。

$memberable:您想要在其中更新会员到期日期的会员模型。

$collection:您想要在其中更新会员到期日期的集合。

$expired_at:会员的到期日期。如果您不指定此参数,则会员不会到期。

$user = User::find(1);
$order = Order::find(1);
$user->updateExpiredAtPerson($order, 'members');

getMember($memberable = null, $collection = null, $is_expired = false)

此方法返回订单模型的会员用户。

$memberable:您想要从中获取用户的会员模型。如果您不指定此参数,则方法将返回用户模型的所有者。

$collection:您想要从中获取用户的集合。如果您不指定此参数,则方法将返回用户模型的所有者。

$is_expired:如果您想获取已过期的会员,可以将此参数设置为true

$user = User::find(1);
$user->getMember('members');

在资源中添加 personable 属性

在会员资源中,有一个名为 personable 的字段可以显示您的模型,但必须按以下方式设置。

首先,为要在会员资源中显示的模型创建一个监听器。

php artisan make:listener AddUserResourceToPersonableResourceListener

然后,将以下代码添加到监听器中。

use JobMetric\Membership\Events\PersonableResourceEvent;

class AddUserResourceToPersonableResourceListener
{
    public function handle(PersonableResourceEvent $event)
    {
        $personable = $event->personable;

        if (personable instanceof \App\Models\User) {
            $event->resource = new \App\Http\Resources\UserResource($personable);
        }
    }
}

最后,将监听器添加到 EventServiceProvider 类。

protected $listen = [
    \JobMetric\Membership\Events\PersonableResourceEvent::class => [
        \App\Listeners\AddUserResourceToPersonableResourceListener::class,
    ],
];

工作已完成,现在当调用 MemberResource 时,如果应返回 UserResource,则该资源的详细信息将显示在 personable 属性中。

在资源中添加 memberable 属性

在会员资源中,有一个名为 memberable 的字段可以显示您的模型,但必须按以下方式设置。

首先,为要在会员资源中显示的模型创建一个监听器。

php artisan make:listener AddOrderResourceToMemberableResourceListener

然后,将以下代码添加到监听器中。

use JobMetric\Membership\Events\MemberableResourceEvent;

class AddOrderResourceToMemberableResourceListener
{
    public function handle(MemberableResourceEvent $event)
    {
        $memberable = $event->memberable;

        if ($memberable instanceof \App\Models\User) {
            $event->resource = new \App\Http\Resources\OrderResource($memberable);
        }
    }
}

最后,将监听器添加到 EventServiceProvider 类。

protected $listen = [
    \JobMetric\Membership\Events\MemberableResourceEvent::class => [
        \App\Listeners\AddOrderResourceToMemberableResourceListener::class,
    ],
];

工作已完成,现在当调用 MemberResource 时,如果应返回 UserResource,则该资源的详细信息将显示在 memberable 属性中。

事件

此包包含几个事件,您可以为它们编写如下监听器

贡献

感谢您考虑为 Laravel Membership 做贡献!贡献指南可以在 CONTRIBUTING.md 中找到。

许可

MIT 许可证(MIT)。有关更多信息,请参阅许可文件