jobmetric / laravel-membership
这是一个Laravel网站会员管理包,您可以在您的项目中使用。
Requires
- php: >=8.0.1
- jobmetric/laravel-package-core: ^1.7
- laravel/framework: >=9.19
- spatie/laravel-query-builder: ^5.7
Requires (Dev)
- phpunit/phpunit: ^10.1
This package is auto-updated.
Last update: 2024-09-30 18:28:08 UTC
README
laravel会员管理
这是一个Laravel网站会员管理包,您可以在您的项目中使用。
在此包中,您可以将任何模型或表中的成员或用户委托给它,无需再担心任何事情,此包有助于简化用户会员管理,您可以放心地将任何会员委托给它。
通过composer安装
运行以下命令以拉取最新版本
composer require jobmetric/laravel-membership
文档
要使用此包的服务,请按照以下说明操作。
在此包中,我们有两个特质类,必须连接到用户和成员模型的两端。
用户模型可以包含 user
和 admin
模型或我们想要包含在成员模型中的任何内容。
成员模型是一个希望任何用户成为成员的模型,例如 post
、product
、order
等。
例如,您需要将两个特质类连接到用户和订单模型。
用户模型
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
集合。数组键的设计根据您模型字段的需求进行,您可以使用任何单词,但每个键前的值必须在
single
和multiple
之间选择。
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)。有关更多信息,请参阅许可文件。