我有一个更新用户表单,其中包含用户名,电子邮件,密码等字段。我需要密码字段为空,并且只有在用户填写了密码时才更新MySQL数据库中的users.password字段领域。可能吗?我使用Yii2的ActiveForm小部件。
答案 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();
}