Playa додає в Laravel-застосунки легку модель Player для відстеження неавторизованих користувачів. Це зручне рішення для сценаріїв із QR-кодами, ігор на івентах, систем голосування, кіосків та демоверсій, де потрібно впізнати пристрій без примусової реєстрації.
# Відстеження за допомогою Middleware
Додайте middleware playa до будь-якого маршруту, де потрібно ідентифікувати або створити гравця:
Route::get('/join/{game}', JoinGameController::class)
->middleware(['web', 'playa'])
->name('games.join');
Під час першого візиту middleware створює запис про гравця та встановлює cookie. При наступних запитах система ідентифікує наявного користувача та оновлює час дії сесії.
# Доступ до поточного Player
Playa дозволяє отримати дані гравця через request або facade:
$player = $request->player();
use CharlieLangridge\Playa\Facades\Playa;
$player = Playa::player();
$player = Playa::findByUuid($uuid);
Playa::forget();
Модель містить поля name та username, а також JSON-колонку data для збереження будь-яких специфічних даних: балів, відповідей чи прогресу користувача.
# Прив’язка до зареєстрованих користувачів
Профіль гравця можна об’єднати з реальним акаунтом. Це корисно, коли користувач починає взаємодію анонімно, а пізніше проходить авторизацію:
$player->linkUser(auth()->user());
$player->unlinkUser();
Пакет підтримує типи ключів bigint, uuid, ulid та string через конфігурацію user_id_type. Опція auto_link_authenticated_user дозволяє автоматично прив’язувати поточного користувача, якщо вона активована.
# Події життєвого циклу
Playa ініціює події на кожному етапі, що дозволяє гнучко налаштувати аналітику або аудит без втручання в middleware:
PlayerCreatedPlayerResolvedPlayerRenewedPlayerExpiredPlayerLinkedToUser
# Термін дії та видалення даних
За замовчуванням дані зберігаються 30 днів і оновлюються при кожному візиті. Застарілі записи не видаляються автоматично — для очищення бази використовуйте Artisan-команду (можна також вказати пільговий період):
php artisan playa:prune
php artisan playa:prune --hours=24
Playa потребує PHP 8.4 та підтримує Laravel 11, 12 і 13.
Детальніше — у репозиторії на GitHub.