我创建了一个包含函数的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
从未调用过。
答案 0 :(得分:1)
我通常在调用它的正确动作(IE:actionLogin)中使用我想要的模型中的任何逻辑。但我喜欢你的方法。
我刚刚在这里做了一个测试,调用事件的正确方法是这样的:
$user = \Yii::$app->user;
$user->on($user::EVENT_AFTER_LOGIN, [$this, 'updateLoginInformation']);
我没有创建行为类,我只是在我的init()
中添加了这些行,但逻辑可能与你的相同。