Laravel Invite Only додає повноцінну систему користувацьких запрошень із tokens, events та reminders

0
Перекладено ШІ
Оригінал: Laravel News
Оновлено: 20 січня, 2026
Laravel Invite Only додає в проєкт гнучку систему запрошень із токенами, поліморфними зв’язками, статусами та автоматичними нагадуваннями. У статті — покрокова інструкція з встановлення, відправлення масових запрошень і обробки подій.

Пакет Laravel Invite Only керує запрошеннями користувачів у Laravel-додатках. Автор — Shavonn Brown. Пакет реалізує запрошення на основі токенів із поліморфними зв’язками, автоматичними нагадуваннями та подієвими сповіщеннями.

Сценарії використання

Підходить для додатків, яким потрібне керування запрошеннями зі стеженням статусу та подальшими діями. Типові випадки: інструменти командної роботи, SaaS з організаційними членствами, платформи співпраці над проєктами, системи подій з RSVP та освітні платформи. Поліморфний дизайн дозволяє одному механізму обробляти запрошення для команд, проєктів, організацій чи будь-якої іншої моделі.

Основні можливості

Laravel Invite Only пропонує інструменти для керування запрошеннями:

Початок роботи

Потрібні PHP 8.2+ та Laravel 11.0 або 12.0. Встановіть пакет через Composer:

composer require offload-project/laravel-invite-only

Опублікуйте конфіг та міграції:

php artisan vendor:publish --tag="invite-only-config"
php artisan vendor:publish --tag="invite-only-migrations"
php artisan migrate

Додайте необхідні трейти HasInvitations та CanBeInvited до своїх моделей:

use OffloadProject\InviteOnly\Traits\HasInvitations;
 
class Event extends Model
{
    use HasInvitations;
}
use OffloadProject\InviteOnly\Traits\CanBeInvited;
 
class User extends Authenticatable
{
    use CanBeInvited;
}

Надсилання запрошень

Підтримуються одиничні та масові запрошення. Для одиночного:

$event->invite('user@example.com', [
    'role' => 'vip',
    'invited_by' => auth()->user(),
]);

Масові запрошення з обробкою часткових помилок:

$result = $event->inviteMany(
    ['eric@example.com', 'paul@example.com', 'harris@example.com'],
    ['role' => 'vip', 'invited_by' => auth()->user()]
);
 
// Access successful invitations
$result->successful;
 
// Check failed invitations with reasons
$result->failed;

Обробка прийняття запрошення

Пакет генерує події на кожному етапі життєвого циклу запрошення. Слухайте подію InvitationAccepted, щоб виконати дії після прийняття:

use OffloadProject\InviteOnly\Events\InvitationAccepted;
 
Event::listen(InvitationAccepted::class, function ($event) {
    $conferenceEvent = $event->invitation->invitable;
    $user = $event->user;
    $role = $event->invitation->role;
 
    $conferenceEvent->attendees()->attach($user->id, ['role' => $role]);
});

Інші події: InvitationCreated, InvitationDeclined, InvitationCancelled та InvitationExpired.

Автоматичні нагадування

Налаштуйте автоматичні нагадування для відправки follow‑up листів щодо очікуваних запрошень. У конфігурації вказують, на які дні відправляти нагадування:

'reminders' => [
    'after_days' => [3, 5],  // Send reminders on day 3 and day 5
    'max_reminders' => 2,
],

Заплануйте команду у routes/console.php:

use Illuminate\Support\Facades\Schedule;
 
Schedule::command('invite-only:send-reminders --mark-expired')->daily();

Система відстежує лічильник нагадувань, щоб уникати дублювання, навіть якщо планувальник пропустив день. Запрошення можна налаштувати на автоматичне завершення через вказану кількість днів (за замовчуванням 7), а команда з прапорцем --mark-expired позначить прострочені запрошення.

Поліморфні зв’язки

Сильна сторона пакета — поліморфний дизайн. Можна прив’язувати запрошення до будь‑якої моделі:

// Conference event invitations
$conferenceEvent->invite('speaker@example.com');
 
// Workshop invitations
$workshop->invite('attendee@example.com');
 
// Meetup invitations
$meetup->invite('participant@example.com');

Це зручно для додатків із різними типами сутностей, яким потрібна система запрошень.

Користувацькі метадані

Зберігайте додаткову інформацію в колонці metadata:

$event->invite('speaker@example.com', [
    'metadata' => [
        'session_topic' => 'Laravel AI SDK',
        'time_slot' => '2:00 PM',
        'dietary_restrictions' => 'vegetarian',
    ],
]);
 
// Retrieve metadata later
$invitation->metadata['session_topic']; // 'Laravel Performance'

Це дозволяє додавати довільні дані без зміни схеми БД.

Обробка помилок

Пакет повертає структуровані виключення з машинозчитуваними кодами помилок:

try {
    InviteOnly::accept($token);
} catch (InvitationException $e) {
    // Human-readable message
    $e->getMessage();   // "This invitation has expired."
 
    // Suggested resolution
    $e->resolution;     // "Create a new invitation..."
 
    // Machine-readable code
    $e->errorCode;      // "INVITATION_EXPIRED"
}

Це полегшує побудову API та надання зрозумілих повідомлень користувачам.

Щоб дізнатися більше й переглянути код, відвідайте репозиторій на GitHub.

Популярні

Logomark Logotype

Випущено Livewire 3.6

Laravel Livewire випустив нову версію 3.6, яка приносить з собою цікаві HTML-директиви для управління видимістю DOM-елементів і JavaScript-діями. Досліджуйте нові можливості Livewire, що допоможуть вам створити ще більш інтерактивні користувацькі інтерфейси!

Logomark Logotype

Nuxt 3 + Laravel Sanctum: Просте та надійне рішення для автентифікації вашого SPA та API

У сучасній веб-розробці аутентифікація є ключовою для захисту додатків і даних користувачів. Дізнайтеся, як модуль nuxt-sanctum-authentication спростить інтеграцію між Nuxt 3 та Laravel Sanctum, забезпечуючи надійний і зручний спосіб реалізації аутентифікації для вашого проєкту

Logomark Logotype

Використання повнотекстового пошуку в Laravel

Laravel пропонує потужні можливості повнотекстового пошуку за допомогою методів whereFullText та orWhereFullText, що дозволяють здійснювати складні запити до бази даних. Дізнайтеся, як реалізувати ефективний пошук для вашого блогу чи системи управління контентом