zaichaopan/online-status

一个用于在您的laravel应用程序中显示用户在线状态的软件包

v0.2-beta 2018-06-21 20:37 UTC

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 事件只会触发一次。如果用户已经在线,则不会再次触发