我在Yii2高级后端做了CRUD。我使用了类扩展ActiveRecord。我有一个密码属性的问题,当我想要更新它时,它会显示带有很多点的散列密码,当我试图更新它时,它不会保存散列密码。所以我使用beforeSave来散列我的密码:
public function beforeSave($insert)
{
if (parent::beforeSave($insert)) {
if($this->isNewRecord) {
$this->created_at = time();
$this->status = self::DEFAULT_STATUS;
$this->generateAuthKey();
$this->setPassword($this->PasswordHash);
$this->RulesAccept=1;
return true;
} else {
$this->setPassword($this->PasswordHash);
return true;
}
}
}我不知道如何才能做到这一点,当我显示更新表单,它显示我的点从散列密码,如果你不改变密码也不会改变。当前,每次单击Update my password都会更改或重新散列。我怎么才能避免这种情况。我尝试在如下形式中使用空值:
<label class="control-label"> <?= Yii::t('app', 'Hasło')?> </label>
<?= $form->field($model, 'PasswordHash')->passwordInput(['placeholder' => Yii::t('app', 'Utwórz hasło'), 'value' => ''])->label('') ?>然后,我尝试检查我的beforeSave(),如果输入表单为空,则不保存此密码,只保留它在数据库中的原样:
public function beforeSave($insert)
{
if (parent::beforeSave($insert)) {
if($this->isNewRecord) {
$this->created_at = time();
$this->status = self::DEFAULT_STATUS;
$this->generateAuthKey();
$this->setPassword($this->PasswordHash);
$this->RulesAccept = 1;
return true;
} else {
if((!empty)$this->PasswordHash)){
$this->setPassword($this->PasswordHash);
return true;
}
return false;
}
}
}因此,当我以更新的形式出现时,我总是看到密码输入为空。如果我不写新的密码,它只会更改我更改的所有属性,但如果我写了一些密码,它会保存我这个新的密码。我认为这个函数应该可以工作,但我错了,这个表单总是更改密码。我能做些什么来解决这个问题。也许还有其他方法?
发布于 2016-07-12 08:39:35
您可以使用$this->isAttributeChanged('password_field')
public function beforeSave($insert)
{
if (parent::beforeSave($insert)) {
if ($this->isAttributeChanged('PasswordHash')) {
$this->setPassword($this->PasswordHash);
}
return true;
} else {
return false;
}
}https://stackoverflow.com/questions/35320968
复制相似问题