這篇文章為大家帶來了關於Laravel的相關知識,其中主要介紹了Laravel中間件怎麼實現統計用戶在線時長 ,感興趣的朋友下面一起來看一下吧,希望對大家有幫助。
Laravel — 了解用戶上次在線的時間以及總計在線時長
此處以統計後台用戶(admin_users)的在線時長為例;前台使用者的話,只是對應的表不一樣(對應users)。
準備資料庫
此處需要新增兩個字段,分別是上次在線時間和總計在線時長(秒為單位):
<?php use Illuminate\Database\Migrations\Migration; use Illuminate\Database\Schema\Blueprint; use Illuminate\Support\Facades\Schema; class AddSpentToAdminUsersTable extends Migration { /** * Run the migrations. * * @return void */ public function up() { Schema::table('admin_users', function (Blueprint $table) { $table->unsignedInteger('spent')->default('0')->comment('使用时长')->after('id'); $table->timestamp('onlined_at')->nullable()->comment('最后访问时间')->after('updated_at'); }); } /** * Reverse the migrations. * * @return void */ public function down() { Schema::table('admin_users', function (Blueprint $table) { // $table->dropColumn(['spent', 'onlined_at']); }); } }
建立中間件
<?php namespace App\Http\Middleware; use Carbon\Carbon; use Closure; use Dcat\Admin\Admin; use Illuminate\Support\Facades\Cache; class CountAdminUserOnlineTime { public function handle($request, Closure $next) { $user = Admin::user(); // 获取当前认证用户 //dd($user); if ($user) { $seenKey = 'auser-last-seen-'; //缓存标识 $lastSeenAt = Cache::get($seenKey . $user->id); // 获取上次访问时间戳 $now = Carbon::now(); if ($lastSeenAt != null) { $duration = $now->diffInSeconds($lastSeenAt); // 计算在线时长(秒数) $user->increment('spent', $duration, ['updated_at' => $user->updated_at, 'onlined_at' => $now]); //updated_at 维持原值 } Cache::put($seenKey . $user->id, $now, Carbon::now()->addMinutes(1)); // 保存当前访问时间戳(并设置缓存过期时间为一分钟) } return $next($request); } }
這裡沒有用使用DB facade 來避免更新使用者表的{更新時間}字段,而用increment 函數的第二個參數來維持updated_at 值不變。
應用中間件
在\app\Http\Kernel.php 中加入一個$routeMiddleware
protected $routeMiddleware = [ //其它 'admin.spent' => \App\Http\Middleware\CountAdminUserOnlineTime::class, //其它 ];
如果你用的是dcat-admin後台框架,可以在config/admin.php 的route 配置裡直接附加middleware:
'middleware' => ['web', 'admin'], // 默认值: 'middleware' => ['web', 'admin', 'admin.spent'], //添加在线时长中间件
其它情況: 在路由定義裡新增:
Route::middleware([/* 其它中间件*/ , 'admin.spent'])->group( function () { //... 需要统计的路由 });
dcat-admin 在概覽頁面展示使用者時長:
//新建一个 AdminUser 模型继承默认的 Administrator <?php namespace App\Models; use Dcat\Admin\Models\Administrator; class AdminUser extends Administrator { } //在线时间表格 use Carbon\Carbon; use Dcat\Admin\Widgets\Callout; use Dcat\Admin\Widgets\Tab; use Dcat\Admin\Widgets\Table; ... public static function tab() { $data = AdminUser::query() ->orderBy('onlined_at', 'DESC') ->get(['name', 'onlined_at', 'spent']) ->toArray(); foreach ($data as &$d) { if (!$d['spent']) { $d['spent'] = '-'; } else { $d['spent'] = formatTime($d['spent']); } if (Carbon::parse($d['onlined_at'])->diffInMinutes() <= 5) { $d['name'] = '<i class="fa fa-circle" style="font-size: 13px;color: #4e9876"></i> ' . $d['name']; } else { $d['name'] = '<i class="fa fa-circle" style="font-size: 13px;color: #7c858e "></i> ' . $d['name']; } } $titles = ['管理员', '最后在线', '总在线时长']; return Tab::make() ->padding(0) ->add('业务信息', Callout::make('后台用户(最近登录)')->success() . Table::make($titles, $data) ); } //公共函数库增加 formatTime /** * 将给定秒数转换为以“x天x时x分钟”形式 * e.g. 123456 => 1天10时17分钟 */ function formatTime($seconds) { $days = floor($seconds / 86400); $hours = floor(($seconds % 86400) / 3600); $minutes = floor(($seconds % 3600) / 60); $result = ""; if ($days > 0) { $result .= "{$days}天"; } if ($hours > 0) { $result .= "{$hours}时"; } if ($minutes > 0) { $result .= "{$minutes}分钟"; } return $result; }
統計結果範例
## 建議學習:「laravel影片教學 # ##
以上是詳解Laravel中間件如何統計使用者線上時長的詳細內容。更多資訊請關注PHP中文網其他相關文章!

Laravel和Python在開發環境和生態系統上的對比如下:1.Laravel的開發環境簡單,僅需PHP和Composer,提供了豐富的擴展包如LaravelForge,但擴展包維護可能不及時。 2.Python的開發環境也簡單,僅需Python和pip,生態系統龐大,涵蓋多個領域,但版本和依賴管理可能複雜。

Laravel是如何在後端邏輯中發揮作用的?它通過路由系統、EloquentORM、認證與授權、事件與監聽器以及性能優化來簡化和增強後端開發。 1.路由系統允許定義URL結構和請求處理邏輯。 2.EloquentORM簡化數據庫交互。 3.認證與授權系統便於用戶管理。 4.事件與監聽器實現松耦合代碼結構。 5.性能優化通過緩存和隊列提高應用效率。

Laravel受歡迎的原因包括其簡化開發過程、提供愉快的開發環境和豐富的功能。 1)它吸收了RubyonRails的設計理念,結合PHP的靈活性。 2)提供瞭如EloquentORM、Blade模板引擎等工具,提高開發效率。 3)其MVC架構和依賴注入機制使代碼更加模塊化和可測試。 4)提供了強大的調試工具和性能優化方法,如緩存系統和最佳實踐。

Django和Laravel都是全棧框架,Django適合Python開發者和復雜業務邏輯,Laravel適合PHP開發者和優雅語法。 1.Django基於Python,遵循“電池齊全”哲學,適合快速開發和高並發。 2.Laravel基於PHP,強調開發者體驗,適合小型到中型項目。

PHP和Laravel不是直接可比的,因為Laravel是基於PHP的框架。 1.PHP適合小型項目或快速原型開發,因其簡單直接。 2.Laravel適合大型項目或高效開發,因其提供豐富功能和工具,但學習曲線較陡,性能可能不如純PHP。

laravelisabackendframeworkbuiltonphp,設計ForweBapplicationDevelopment.itfocusessonserver-sideLogic,databasemagemention和Applicationstructure和CanBeintegratedWithFrontendTechnologiesLikeLikeVue.jsorreActeReacterVue.jsorreActforforfull-stackDevefloct。

本文討論了Laravel中的創建和使用自定義刀片指令以增強模板。它涵蓋了定義指令,在模板中使用它們,並在大型項目中管理它們,強調了改進的代碼可重複性和R等好處

本文討論了使用組件在Laravel中創建和自定義可重複使用的UI元素,從而為組織提供最佳實踐並建議增強包裝。


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

SecLists
SecLists是最終安全測試人員的伙伴。它是一個包含各種類型清單的集合,這些清單在安全評估過程中經常使用,而且都在一個地方。 SecLists透過方便地提供安全測試人員可能需要的所有列表,幫助提高安全測試的效率和生產力。清單類型包括使用者名稱、密碼、URL、模糊測試有效載荷、敏感資料模式、Web shell等等。測試人員只需將此儲存庫拉到新的測試機上,他就可以存取所需的每種類型的清單。

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

EditPlus 中文破解版
體積小,語法高亮,不支援程式碼提示功能

記事本++7.3.1
好用且免費的程式碼編輯器

VSCode Windows 64位元 下載
微軟推出的免費、功能強大的一款IDE編輯器