Събитието Yii2 не се изпълнява след влизане

Създадох поведение, което съдържа функция. Тази функция трябва да бъде след влизане на потребител (yii/web/User::EVENT_AFTER_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()
        ];
    }

Ако знам добре, че EVENT_AFTER_LOGIN ще се задейства автоматично от Yii framework, това е причината да не го задействам отново.

И не знам къде е проблемът, защото 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