Код: Выделить всё
...
$this->_user = User::findByLogin($this->login);
$this->_user->scenario = 'login'; // вариант 1
Yii::configure($this->_user, ['scenario' => 'login']); // вариант 2
...
на момент вызова save() - конечно уже 'login', это точно, сценарий тут установлен ок, пробовал устанавливать несуществующий сценарий - получил исключение (я уже все возможные тупняки пытаюсь исключить ).
как передать сценарий в findByLogin/findOne/и тд - для меня чего то не очевидно...
так что вот...
весь код такой:
LoginForm.php:
Код: Выделить всё
...
public function login()
{
if ($this->validate() && $this->user) {
$return = Yii::$app->user->login($this->_user, $this->rememberMe ? 3600 * 24 * 30 : 0);
if($return) {
$this->_user->trigger(User::EVENT_LOGIN);
$this->_user->save();
}
return $return;
} else {
return false;
}
}
public function getUser()
{
if ($this->_user === false) {
$this->_user = User::findByLogin($this->login);
Yii::configure($this->_user, ['scenario' => 'login']);
}
return $this->_user;
}
}
...
Код: Выделить всё
...
const EVENT_LOGIN = 'user_login';
public function behaviors()
{
$timestampAttributes = [];
if($this->scenario == 'login') {
$timestampAttributes[self::EVENT_LOGIN] = ['logged_at'];
} else {
$timestampAttributes[self::EVENT_BEFORE_INSERT] = ['created_at', 'updated_at'];
$timestampAttributes[self::EVENT_BEFORE_UPDATE] = ['updated_at'];
}
return array_merge(parent::behaviors(),
[
'timestamp' => [
'class' => TimestampBehavior::className(),
'attributes' => $timestampAttributes,
],
]
);
}
...