Piszę w yii2. Zrobiłem CRUD do danych użytkownika.Zrobiłem to korzystająć z ActiveRecord. I teraz gdy chcę zaktualizować dane użytkownika mam tam input hasło. Za każdym razem to hasło nadpisuje mi się gdy kliknę przycisk update. Zrobiłem funkcję beforeSave, żeby zapisywać dane niepochodzące z inputów:

  1. public function beforeSave($insert)
  2. {
  3. if (parent::beforeSave($insert)) {
  4. if($this->isNewRecord) {
  5. $this->created_at = time();
  6. $this->status = self::DEFAULT_STATUS;
  7. $this->generateAuthKey();
  8. $this->setPassword($this->PasswordHash);
  9. $this->RulesAccept=1;
  10. return true;
  11. }
  12. else {
  13. $this->setPassword($this->PasswordHash);
  14. return true;
  15. }
  16. }
  17. }



Tutaj sprawdzam czy jest to nowy user czy tylko aktualizacja. Ale to nei działa bo za każdym razem hasło się nadpisuje. Pomyślałem, że stworzę input który zawsze będzie pusty:
  1. <label class="control-label"> <?= Yii::t('app', 'Hasło')?> </label>
  2. <?= $form->field($model, 'PasswordHash')->passwordInput(['placeholder' => Yii::t('app', 'Utwórz hasło'), 'value' => ''])->label('') ?>



No i chciałem napisać coś, żeby sprawdzić, czy ktoś aktualizując dane usera wpisał nowe hasło czy nie. Jeśli input jest pusty tzn, że nie chcę zapisywać hasła i w bazie to zahaszowane hasło ma się nie zmienić ale jeśli ktoś uzupełnił ten iput to ma zahaszować podane hasło:

  1. public function beforeSave($insert)
  2. {
  3. if (parent::beforeSave($insert)) {
  4. if($this->isNewRecord) {
  5. $this->created_at = time();
  6. $this->status = self::DEFAULT_STATUS;
  7. $this->generateAuthKey();
  8. $this->setPassword($this->PasswordHash);
  9. $this->RulesAccept=1;
  10. return true;
  11. }
  12. else {
  13. If((!empty)$this->PasswordHash)){
  14. $this->setPassword($this->PasswordHash);
  15. return true;
  16. }return false
  17. }
  18. }
  19. }



Ale niestety to nie działa. Czy jest jakiś sposób na to żeby hasło sie nie nadpisywało? Nie mam już pomysłu.