2016-05-08 69 views
0

我創建了一個包含函數的行爲。此功能應該在用戶登錄後(yii/web/User :: EVENT_AFTER_LOGIN)。 但是這個功能永遠不會被觸發不幸。Yii2登錄後無法運行

我有一個行爲類用戶模型:

class UserBehavior extends Behavior 
{ 
    /** 
    * @inheritdoc 
    * @param \yii\base\Component $owner 
    */ 
    public function attach($owner) 
    { 
     parent::attach($owner); 
     $owner->on(\yii\web\User::EVENT_AFTER_LOGIN, [$this, 'updateLoginInformation']); 
    } 


    /** 
    * Update login information data: 
    * - login ip address 
    * - login time 
    */ 
    public function updateLoginInformation() 
    { 
     /** @var \common\models\User $owner */ 
     $owner = $this->owner; 
     $owner->logged_in_ip = Yii::$app->request->getUserIP(); 
     $owner->logged_in_at = time(); 
     $owner->save(); 
    } 
} 

我聲明的事件和重視了。 但這個事件永遠不會被登錄之後運行...

我重視這個行爲和用戶模型:

/** 
    * @inheritdoc 
    */ 
    public function behaviors() 
    { 
     return [ 
      TimestampBehavior::className(), 
      UserBehavior::className() 
     ]; 
    } 

如果我知道了良好的EVENT_AFTER_LOGIN將自動被Yii框架觸發,這是之所以我不再觸發它。

而且我不在哪裏出問題,因爲updageLoginInformatin從來沒有叫過。

回答

1

我通常在調用它的適當操作(IE:actionLogin)內使用任何邏輯模型。但我喜歡你的方法。

我只是做了一個在這裏測試,並呼籲該事件的正確的方法是這樣的:

$user = \Yii::$app->user; 
$user->on($user::EVENT_AFTER_LOGIN, [$this, 'updateLoginInformation']); 

我沒有創建一個類的行爲,我只是說此行我的init(),但邏輯可能與你的一樣。