У меня есть пользовательская форма обновления с полями, такими как имя пользователя, адрес электронной почты, пароль и т. Д. Мне нужно, чтобы поле пароля было пустым и обновляло поле users.password в базе данных MySQL только тогда, когда пользователь заполнил в поле пароля. Является ли это возможным? Я использую виджет ActiveForm для Yii2.Yii2 ActiveForm issue
0
A
ответ
0
Прежде всего, это не проблема Yii2 ActiveForm. Это можно сделать, выполнив несколько простых шагов.
Создайте две переменные в вашей модели, одну для хранения пароля, а другую - для поля повторного пароля.
public $REPEAT_PASSWORD;
public $INIT_PASSWORD;
затем добавить функцию afterFind установить нулевое значение для вашего поля ввода пароля, так что оно не будет показано пользователю
public function afterFind()
{
//reset the password to null because we don't want password to be shown.
$this->INIT_PASSWORD = $this->PASSWORD;
$this->PASSWORD = null;
parent::afterFind();
}
и теперь написать функцию BeforeSave для сохранения пароля пользователя, если пользователь вошел в
public function beforeSave()
{
// in this case, we will use the old hashed password.
if(empty($this->PASSWORD) && empty($this->REPEAT_PASSWORD) && !empty($this->INIT_PASSWORD)) {
$this->PASSWORD=$this->REPEAT_PASSWORD=$this->INIT_PASSWORD;
} elseif(!empty($this->PASSWORD) && !empty($this->REPEAT_PASSWORD) && ($this->PASSWORD == $this->REPEAT_PASSWORD)) {
$this->PASSWORD = md5($this->PASSWORD);
$this->REPEAT_PASSWORD = md5($this->REPEAT_PASSWORD);
}
return parent::beforeSave();
}
Да, это возможно. что ты уже испробовал? –
И как я могу это достичь? –
Я не уверен, в чем проблема. Если оставить поле пустым, оно не будет обновляться, просто. Если у вас возникли проблемы, нам, вероятно, понадобится увидеть какой-то код, чтобы мы могли помочь вам определить, что ваша проблема, поскольку это обычно не проблема. Полезный код для просмотра будет вашей полной моделью, соответствующим действием контроллера и используемым представлением. –