Событие Yii2 не запускается после входа в систему

Я создал поведение, которое содержит функцию. Эта функция должна выполняться после входа в систему пользователя (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 никогда не звонил.


person Dabagab    schedule 08.05.2016    source источник


Ответы (1)


Обычно я использую любую логику, которую хочу, в модели внутри соответствующего действия, которое ее вызывает (IE: actionLogin). Но мне нравится твой подход.

Я только что сделал тест здесь, и правильный способ вызвать событие выглядит примерно так:

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

Я не создавал класс поведения, я просто добавил эти строки в свой init(), но логика, вероятно, такая же, как у вас.

person Clyff    schedule 09.05.2016