登录后未运行Yii2事件
我创建了一个包含函数的行为。此函数应在用户登录后使用(yii/web/User::EVENT\u AFTER\u LOGIN)。 但这个函数永远不会被意外触发 我有一个针对用户模型的行为类:登录后未运行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) {
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()
中添加了这几行,但逻辑可能与您的相同