2016-02-10 2 views
0

J'ai fait CRUD dans Yii2 Advanced-backend. J'ai utilisé la classe étendre ActiveRecord. Et j'ai un problème avec l'attribut de mot de passe, quand je veux mettre à jour il affiche le mot de passe hashed avec beaucoup de points, quand j'essaye de le mettre à jour ne sauve pas le mot de passe hashed. Donc, je beforeSave de hachage mon mot de passe:Mettre à jour le mot de passe dans le backend dans 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; 
     } 
    } 
} 

Je ne sais pas comment puis-je faire lorsque j'ai montré la mise à jour forme il me afficher une stratégie DOTS de mot de passe haché et si vous ne modifiez pas le mot de passe aussi ne changera pas. Actuellement, et chaque fois que vous cliquez sur Mettre à jour mon mot de passe est modifié ou re-hachage. Comment puis-je éviter ça. Je tente d'utiliser la valeur vide sous forme comme ceci:

<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('') ?> 

Et puis j'ai essayé de vérifier dans mon beforeSave() si le formulaire d'entrée était vide ne puis enregistre pas ce mot de passe juste le laisser tel qu'il est dans la base de données:

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; 
     } 
    } 
} 

Donc toujours quand je viens sous la forme de mise à jour, je vois une entrée vide du mot de passe. Et si je n'écris pas un nouveau mot de passe, il ne change que tous les attributs que j'ai changé, mais si j'ai écrit un mot de passe, il me garde ce nouveau mot de passe. Je pense que cette fonction devrait fonctionner mais je me trompe et ce formulaire change toujours le mot de passe. Que puis-je faire pour résoudre ce problème? Peut-être qu'il y a un autre moyen?

+0

Il peut même afficher un point mot de passe haché ma base de données, mais quand je clique sur le mettre à jour mon mot de passe ne devrait pas écraser et quand je supprimer ce pointillé et a écrit le nouveau mot de passe (6 lettres) et ceci devrait me sauver le nouveau mot de passe et peut montrer encore beaucoup de points du mot de passe hashed. Que puis-je faire pour réparer cela? – Informer

Répondre

0

vous pouvez utiliser $ 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; 
    } 
}