0
我在Yii2高級後端做了CRUD。我用類擴展ActiveRecord。而且我有一個密碼屬性的問題,當我想更新它時,顯示帶有許多點的散列密碼,當我嘗試更新它時不保存散列密碼。所以我用beforeSave散列我的密碼:在yii2後臺更新密碼
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;
}
}
}
我不知道我該怎麼做,當我顯示了更新的形式,它顯示我從哈希密碼點,如果不更改密碼,也不會改變。目前,每次單擊更新我的密碼已更改或重新哈希。我怎樣才能避免這一點。我試圖在形式上使用空值是這樣的:
<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;
}
}
}
所以總是當我進入更新的形式,我看到空輸入密碼。如果我沒有寫新密碼,它只會改變我更改的所有屬性,但是如果我寫了一些密碼,它會爲我保存這個新密碼。我認爲這個功能應該工作,但我錯了,這種形式總是改變密碼。我能做些什麼來解決這個問題。也許還有其他的方式?
它甚至可以顯示一個點從我的數據庫散列密碼,但是當我點擊更新它不應該覆蓋我的密碼,當我刪除此點並寫了新的密碼(6個字母),這應該保存我新的密碼,並可以再次顯示來自散列密碼的很多點。我能做些什麼來修復? – Informer