【问题标题】:Count active Cache sessions Laravel. (Advice Needed)计算活动的缓存会话 Laravel。 (需要建议)
【发布时间】:2021-12-09 05:12:17
【问题描述】:

在这里遇到问题,并且几天来一直在努力寻找解决方案。 我希望能够统计我的 Laravel 应用程序中的在线用户数量。

我已经构建了一个系统,用于在管理面板的应用程序中显示在线和离线用户状态。

但是我试图获得一个计数器来显示在线用户的数值。 下面是我用于显示在线离线状态的代码。 但是现在我尝试在使用计数时调用(Cache::has('user-is-online') 但是我无法让它工作。 希望有人能像我所说的那样提供帮助。

对于我确实设法构建的内容,我使用了以下内容:

创建的中间件:

    <?php

namespace App\Http\Middleware;

use Closure;
use Auth;
use Cache;
use Carbon\Carbon;

class LastUserActivity
{
    /**
     * Handle an incoming request.
     *
     * @param \Illuminate\Http\Request $request
     * @param \Closure $next
     * @return mixed
     */
    public function handle($request, Closure $next)
    {
        if (Auth::check()) {
            $expiresAt = Carbon::now()->addMinutes(1);
            Cache::put('user-is-online-' . Auth::user()->id, true, $expiresAt);
        }
        return $next($request);
    }
}

创建的控制器:

 <?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use DB;
use Cache;

class UserController extends Controller
{

    /**
     * Show user online status.
     *
     */
    public function userOnlineStatus()
    {
        $users = DB::table('users')->get();

        foreach ($users as $user) {
            if (Cache::has('user-is-online-' . $user->id))
                echo "User " . $user->name . " is online.";
            else
                echo "User " . $user->name . " is offline.";
        }
    }
}

创建的路线:

 Route::get('/check', 'StatusController@userOnlineStatus');

我称之为:

 <td>
                            @if(Cache::has('user-is-online-' . $user->id))
                                <span class="badge badge-warning rounded-0 w-100">Online</span>
                            @else
                                <span class="badge badge-danger rounded-0 w-100">Offline</span>
                            @endif
                    </td>

【问题讨论】:

    标签: php laravel twitter-bootstrap bootstrap-4


    【解决方案1】:

    因为您对缓存中的每个用户都有唯一的密钥。在您的情况下,您无法通过部分键找到它。您可以像在 userOnlineStatus 函数中一样保留一个计数器,然后打印结果。往下看。

    /**
     * Show number of online users.
     *
     */
    public function numberOfOnlineUsers()
    {
        $users = DB::table('users')->get();
        $counter = 0;
        foreach ($users as $user) {
            if (Cache::has('user-is-online-' . $user->id)) {
                $counter++;   
            }
        }
        
       
        //Passing $counter to the view
    
        return view("your_blade_file_name", ['counter' => $counter]);
    }
    

    在刀片文件中访问

    The number of online users are {{ $counter }}
    

    【讨论】:

    • 哇,感谢您的代码!我对 Laravel 很陌生。所以我将在我的控制器中的其他功能下添加这个功能。我是否需要配置一条新路线来获得这个?什么方法最适合我从 laravel 刀片文件中调用计数?非常感谢
    • 如果你想将它作为一个单独的函数使用,那么你需要配置路由。将此计数器变量传递给刀片文件。我将编辑上面的答案,向您展示如何将参数传递给刀片文件。但是你会在 laravel 网站上找到更好的文档。
    • 再次感谢您的帮助真的为我解决了这一切。我刚刚在网站上问了另一个问题,希望你有时间可以再看看!
    猜你喜欢
    • 1970-01-01
    • 2012-06-17
    • 1970-01-01
    • 1970-01-01
    • 2011-01-26
    • 2021-06-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多