登录后未运行Yii2事件

登录后未运行Yii2事件,yii,yii2,Yii,Yii2,我创建了一个包含函数的行为。此函数应在用户登录后使用(yii/web/User::EVENT\u AFTER\u LOGIN)。 但这个函数永远不会被意外触发 我有一个针对用户模型的行为类: class UserBehavior extends Behavior { /** * @inheritdoc * @param \yii\base\Component $owner */ public function attach($owner) {

我创建了一个包含函数的行为。此函数应在用户登录后使用(yii/web/User::EVENT\u AFTER\u LOGIN)。 但这个函数永远不会被意外触发

我有一个针对用户模型的行为类:

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()
        ];
    }
我也宣布了事件和附件。 但此事件在登录后永远不会运行

我将此行为附加到用户模型:

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()
        ];
    }
如果我很清楚,Yii框架将自动触发登录后的事件,这就是我不再次触发它的原因


我不知道问题出在哪里,因为从未调用过
updageLoginInformatin

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

我刚刚在这里做了一个测试,调用事件的正确方式如下:

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

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

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

我刚刚在这里做了一个测试,调用事件的正确方式如下:

$user = \Yii::$app->user;
$user->on($user::EVENT_AFTER_LOGIN, [$this, 'updateLoginInformation']);
我没有创建行为类,我只是在我的
init()
中添加了这几行,但逻辑可能与您的相同