2010-06-12 6 views
0

Je suis arrivé quelques lignes de code dans un modèle CakePHP 1,26:

function beforeSave() { 
     $this->data['User']['pswd'] = md5($raw['User']['pswd']);    
     return true; 
         } // this beforeSave() works 

Le code ci-dessus a été testé et il fonctionne dans ma base de données.
Pourtant, je ne suis pas sûr si je peux le comprendre bien,
alors, j'ai réécrit le code d'une autre manière, et il a juste échoué à travailler alors.

function beforeSave() { 
      $raw=$this->data;  
      $raw['User']['pswd'] = md5($raw['User']['pswd']);      
      return true; 
          } // this beforeSave() failed to work 

Pourquoi la deuxième méthode ne peut pas fonctionner?

+0

La première méthode ne peut pas fonctionner comme cela est. La variable '$ raw' n'est pas définie dans' beforeSave'. Êtes-vous en train d'omettre quelque chose? – deceze

Répondre

3

Dans cette ligne:

$raw=$this->data 

Vous n'êtes plus qu'à attribuer $this->data par valeur à $raw. Ainsi, lorsque vous modifiez les données de tableau $raw, $this->data n'est pas affecté par la modification. En outre, vous modifiez totalement la signification de votre code. Ce que vous finissez par faire est en remplaçant$raw les données avec $this->data à partir de votre modèle. Je n'ai jamais travaillé avec CakePHP auparavant, mais je suppose que $raw contient déjà toutes les données brutes que vous avez reçues grâce à une entrée, alors que $this->data dans votre modèle contient l'ancienne version de vos données de modèle (par exemple, un ancien mot de passe que le l'utilisateur allait changer). Votre code modifié effacera simplement toutes les nouvelles données dans $raw, ce que je ne pense pas est ce que vous avez l'intention de faire en juger par votre premier exemple de code.

Pour vous donner une petite explication de cette ligne:

$this->data['User']['pswd'] = md5($raw['User']['pswd']); 

Il est assez simple: l'élément pswd dans le tableau User de $this->data est défini comme la somme de contrôle MD5 du pswd dans le tableau User de $raw.

2
if($this->data['Register']['password'] == $this->data['Register']['confirm_password']) 
{ 
    return true; 
} 
else 
{ 
    return false; 
} 

Utilisez dans votre fonction de modèle beforeSave()