Yii2事件在登录后未运行

时间:2016-05-08 11:14:38

标签: yii yii2

我创建了一个包含函数的Behavior。此函数应为user ofLogon(yii / web / User :: EVENT_AFTER_LOGIN)。 但这项功能永远不会被触发。

我有一个用户模型的Behavior类:

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 个答案:

答案 0 :(得分:1)

我通常在调用它的正确动作(IE:actionLogin)中使用我想要的模型中的任何逻辑。但我喜欢你的方法。

我刚刚在这里做了一个测试,调用事件的正确方法是这样的:

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

我没有创建行为类,我只是在我的init()中添加了这些行,但逻辑可能与你的相同。