zaichaopan / online-status
一个用于在您的laravel应用程序中显示用户在线状态的软件包
v0.2-beta
2018-06-21 20:37 UTC
Requires
- php: >=7.1.0
- illuminate/support: ~5.5.0|~5.6.0
- predis/predis: ^1.1
Requires (Dev)
- orchestra/testbench: ^3.5.0
- phpunit/phpunit: ^7.2
This package is not auto-updated.
Last update: 2024-09-29 04:43:22 UTC
README
此软件包为您的laravel应用程序添加了显示用户在线状态、在线用户和在线用户数量的功能。此软件包可在 laravel 5.5 或更高版本 中使用。
安装
此软件包在后台使用 redis。因此,请确保在您的机器上安装redis,以便使用此软件包。
composer require zaichaopan/online-status
用法
- 将 HasOnlineStatus 特性添加到您的用户模型中
//... use Zaichaopan\OnlineStatus\HasOnlineStatus; class User extends Model { use HasOnlineStatus; }
- 设置在线过期时间。
此软件包使用 config/session.php 中的 lifetime 作为默认用户在线过期时间。如果用户在此时间段内保持不活跃,则被视为离线。如果您想自定义,可以在 config/session.php 中覆盖它,或者您可以在用户模型中按以下方式覆盖它
// ... class User extends Model { use HasOnlineStatus; public static function getOnlineExpirationInMinutes(): int { return 10; } }
- 应用 UserOnline 中间件.php
// App\Http\Kernel.php class Kernel extends HttpKernel { // ... protected $middlewareGroups = [ 'web' => [ \\... \Zaichaopan\OnlineStatus\Middleware\UserOnline::class ], //... ]; }
现在,当认证用户发起Web请求时,他们的在线状态将自动设置。
// class UserOnline { // ... public function handle(Request $request, Closure $next) { optional($request->user())->online(); return $next($request); } }
可用API
- 获取用户是否在线
$status = $user->isOnline; // or $status = $user->isOnline();
- 获取总在线用户数
$onlineUserCount = User::onlineCount();
- 获取在线用户
$onlineUsers = User::ofOnline()->get(); // or $onlineUsers = User::ofOnline()->paginate();
- 设置用户在线
只要您正确应用了 UserOnline 中间件,它将自动设置和更新认证用户的在线状态。如果您想手动设置,可以使用特性提供的 online 方法。
$user->online();
- 设置用户离线
此软件包监听 Logout 事件。当用户登出时,它将设置用户在线状态为离线。如果您想手动设置用户离线,可以使用特性提供的 offline 方法。
$use->offline();
事件
在更新用户在线状态的过程中,此软件包会触发两个事件。您可以在EventServiceProvider中将监听器附加到这两个事件上
/** * The event listener mappings for the application. * * @var array */ protected $listen = [ 'Zaichaopan\OnlineStatus\Events\Online' => [ 'App\Listeners\Online', ], 'Zaichaopan\OnlineStatus\Events\Offline' => [ 'App\Listeners\Offline', ] ];
Online 事件只会触发一次。如果用户已经在线,则不会再次触发