izqut/membership

Laravel ئۈچۈن ئاددىي ۋە ئۈنۈملۈك ئالىي ئەزالىق باشقۇرۇش بولىقى

Maintainers

Package info

gitee.com/izqutcn/memberships.git

Homepage

pkg:composer/izqut/membership

Statistics

Installs: 1

Dependents: 0

Suggesters: 0

dev-master 2025-10-20 05:45 UTC

This package is not auto-updated.

Last update: 2026-03-24 05:57:06 UTC


README

A simple and powerful membership management package for Laravel.

Features

  • ✅ Simple and easy-to-use API
  • ✅ Check VIP membership with $user->isVip()
  • ✅ Support for multiple membership plans
  • ✅ Lifetime (perpetual) membership support
  • ✅ Time-based membership management
  • ✅ Blade directives (@vip, @membership)
  • ✅ Helper functions
  • ✅ Flexible user model configuration
  • ✅ Compatible with PHP 7.3+ and Laravel 8-11

Installation

composer require izqut/membership

Setup

1. Run Migrations

php artisan migrate

2. Publish Config (Optional)

php artisan vendor:publish --tag=membership-config

3. Add Trait to User Model

use Izqut\Membership\Traits\HasMembership;

class User extends Authenticatable
{
    use HasMembership;

    // ...
}

4. Custom User Model (Optional)

If your user model is not named User (e.g., UserAccount, Member), configure it in the config file:

// config/membership.php
'user_model' => App\Models\UserAccount::class,

Or in .env:

MEMBERSHIP_USER_MODEL=App\Models\UserAccount

Usage

Creating Membership Plans

use Izqut\Membership\Models\Membership;

// Create VIP membership (slug='vip' is automatically recognized as VIP)
Membership::create([
    'name' => 'VIP Membership',
    'slug' => 'vip',
    'price' => 99.99,
    'duration_days' => 30, // 30 days
    'is_active' => true,
]);

// Create Premium membership
Membership::create([
    'name' => 'Premium Membership',
    'slug' => 'premium',
    'price' => 49.99,
    'duration_days' => 30,
    'is_active' => true,
]);

// Create Lifetime membership
Membership::create([
    'name' => 'Lifetime Membership',
    'slug' => 'lifetime',
    'price' => 299.99,
    'duration_days' => null, // null = lifetime
    'is_active' => true,
]);

Subscribing Users

$user = User::find(1);
$plan = Membership::where('slug', 'vip')->first();

// Subscribe to membership
$user->subscribe($plan);

// Or by ID
$user->subscribe(1);

Checking VIP Status

// In controller
if ($user->isVip()) {
    // VIP features
}

// Or using helper function
if (is_vip()) {
    // Current user is VIP
}

Checking Membership

// Has active membership?
if ($user->hasMembership()) {
    // User has membership
}

// Has specific membership plan?
if ($user->hasMembershipPlan('vip')) {
    // User has VIP membership
}

// Get current membership plan
$plan = $user->currentMembershipPlan();

// Get remaining days
$daysLeft = $user->membershipDaysRemaining();

Using in Blade Templates

{{-- Show to VIP members only --}}
@vip
    <div class="vip-content">
        VIP Exclusive Content
    </div>
@endvip

{{-- Show to members --}}
@membership
    <div class="member-content">
        Members Only Content
    </div>
@else
    <div class="non-member">
        Get membership now!
    </div>
@endmembership

{{-- Show to specific membership plan --}}
@membershipPlan('premium')
    <div class="premium-content">
        Premium Content
    </div>
@endmembershipPlan

Helper Functions

// Get current user's membership
$membership = membership();

// Check if VIP
if (is_vip()) {
    // VIP user
}

// Check if has membership
if (has_membership()) {
    // Has membership
}

// Check specific membership
if (has_membership('vip')) {
    // Has VIP membership
}

// Get all active membership plans
$plans = membership_plans();

Canceling Membership

$user->cancelMembership();

Advanced Usage

// Membership details
$membership = $user->membership;

if ($membership) {
    // Is active?
    $isActive = $membership->isActive();

    // Is expired?
    $isExpired = $membership->isExpired();

    // Days remaining
    $daysLeft = $membership->daysRemaining();

    // Membership plan
    $plan = $membership->membership;

    // Activate/Deactivate
    $membership->activate();
    $membership->deactivate();
}

Eloquent Scopes

use Izqut\Membership\Models\UserMembership;

// Active memberships
$activeMemberships = UserMembership::active()->get();

// Expired memberships
$expiredMemberships = UserMembership::expired()->get();

// Expiring soon (within 7 days)
$expiringSoon = UserMembership::expiringSoon(7)->get();

Database Structure

memberships table

  • id - Primary key
  • name - Membership name
  • slug - URL-friendly identifier (slug='vip' is recognized as VIP)
  • description - Description
  • price - Price
  • duration_days - Duration in days (null = lifetime)
  • is_active - Is active?
  • features - Features (JSON)
  • sort_order - Sort order

user_memberships table

  • id - Primary key
  • user_id - User ID
  • membership_id - Membership plan ID
  • starts_at - Start date
  • expires_at - Expiration date
  • is_active - Is active?

Configuration

You can customize the following settings in config/membership.php:

return [
    'currency' => 'USD',
    'default_duration' => 30,
    'vip_slug' => 'vip',
    'user_model' => 'App\\Models\\User',  // User model class
    'grace_period_days' => 0,
    'auto_deactivate_expired' => true,
];

Configuration Options

  • currency: Currency code (USD, EUR, etc.)
  • default_duration: Default membership duration in days
  • vip_slug: VIP membership slug identifier (default: 'vip')
  • user_model: Fully qualified user model class name
  • grace_period_days: Grace period after expiration
  • auto_deactivate_expired: Auto-deactivate expired memberships

Examples

Simple Example

// 1. Create membership plan (slug='vip' is automatically VIP)
$vipPlan = Membership::create([
    'name' => 'VIP',
    'slug' => 'vip',
    'price' => 49.99,
    'duration_days' => 30,
    'is_active' => true,
]);

// 2. Subscribe user
$user = User::find(1);
$user->subscribe($vipPlan);

// 3. Check status
if ($user->isVip()) {
    echo "You are a VIP member!";
}

Blade Usage Example

<div class="user-dashboard">
    @vip
        <div class="alert alert-success">
            Welcome VIP member! You have access to exclusive features.
        </div>

        <a href="/vip/downloads" class="btn btn-primary">
            VIP Downloads
        </a>
    @else
        <div class="alert alert-info">
            <a href="/membership/plans">Become a VIP</a>
            and unlock more features!
        </div>
    @endvip
</div>

Requirements

  • PHP 7.3 or higher
  • Laravel 8.0 or higher

License

MIT License

About

This package provides:

  1. Simple API - Easy-to-use methods like $user->isVip()
  2. Flexible - Easy to extend and customize
  3. Laravel Standard - Follows Laravel conventions
  4. Multiple Plans - Support for VIP, Premium, Basic, and custom membership types
  5. Composer Installation - Install with composer require izqut/membership