2015-04-12 63 views
2

您將在Yii2框架中添加'last seen'更新?我不能在LoginForm :: login()中做到這一點,因爲我希望每次用戶加載頁面時都要更新它。Yii2實現'Last Last Seen'更新

任何提示?

+1

你有類類似WEBUSER在保護/組件?在負責用戶授權的課程中進行。 –

+0

這是在Yii 1.x中的方式,你是否建議創建一個從用戶模型擴展的組件並將其用作身份驗證類? –

回答

2

創建一個應用程序下/組件文件夾名爲「Controller.php這樣」組件,

<?php 

namespace app\components; 
use Yii; 
use app\models\User; 

class Controller extends \yii\web\Controller 
{ 
    public function init() 
    { 
     parent::init(); 

     if (!Yii::$app->user->isGuest) { 
      // Code to Set the last seen time for the user. For eg, 
      $user = User::findOne(Yii::$app->user->id); 
      $user->last_seen = date('Y-m-d H:i:s'); 
      $user->save(false, ["last_seen"]); 
     } 
    } 
} 

現在,在你的應用程序中使用的所有控制器必須延長「控制器」的組成部分。對於例如,

<?php 

namespace app\controllers; 

use Yii; 
use app\components\Controller; //Instead of yii\web\Controller 

class SiteController extends Controller 
{ 
    public function actionIndex() 
    { 
     return $this->render('index'); 
    } 
} 

這樣每一次,當頁面加載,最後看到的時間將被設置。

+2

由於用戶未輸入值,因此可以跳過驗證,只應更新'last_seen',即'$ user-> save(false,[「last_seen」])''。 +1 – topher

+0

我已經更新了答案 –

+1

不好的例子,在配置文件中添加'on beforeAction'的變體 –

1

樣 「活性」 FILD添加到用戶表

添加在配置代碼:

'components'=>[ 
.... 
    ], 
    'on beforeAction' => function(){ 
     if(!Yii::$app->user->isGuest){ 
     \common\models\User::updateAll(['activity'=>time()],['id'=>Yii::$app->user->id]); 
     } 
    },