2015-03-22 2 views
0

У меня есть пользовательская форма обновления с полями, такими как имя пользователя, адрес электронной почты, пароль и т. Д. Мне нужно, чтобы поле пароля было пустым и обновляло поле users.password в базе данных MySQL только тогда, когда пользователь заполнил в поле пароля. Является ли это возможным? Я использую виджет ActiveForm для Yii2.Yii2 ActiveForm issue

+0

Да, это возможно. что ты уже испробовал? –

+0

И как я могу это достичь? –

+0

Я не уверен, в чем проблема. Если оставить поле пустым, оно не будет обновляться, просто. Если у вас возникли проблемы, нам, вероятно, понадобится увидеть какой-то код, чтобы мы могли помочь вам определить, что ваша проблема, поскольку это обычно не проблема. Полезный код для просмотра будет вашей полной моделью, соответствующим действием контроллера и используемым представлением. –

ответ

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(); 
}