2016-05-08 4 views
0

機能を含むビヘイビアを作成しました。この関数は、User of Logon(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()にこのラインを追加しましたが、ロジックはおそらくあなたと同じです。

関連する問題