2016-05-08 85 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(),但逻辑可能与你的一样。