Yii2 ActiveForm问题

时间:2015-03-22 08:50:01

标签: forms passwords yii2

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

1 个答案:

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