Salut à tous,
J'ai un probléme avec le tuto sur l'espace membre. J'en suis à l'édition du profil, notamment au changement de mot de passe.
voila mon code :
/*
* Edition d'un compte membre
*/
public function edit() {
$user_id = $this->Auth->user('id');
// Securité
if (!$user_id) {
$this->redirect(array('action' => 'index'));
}
$this->User->id = $user_id;
$passError = false;
if ($this->request->is('put')) {
$data = $this->request->data;
$data'User']'id'] = $user_id;
if (!empty($data'User']'pass1'])) {
if ($data'User']'pass1'] == $data'User']'pass2']) {
$data'User']'password'] = Security::hash($data'User']'pass1'], null, true);
} else {
$passError = true;
}
}
if ($this->User->save($data, true, array('firstname', 'lastname', 'password'))) {
$this->Session->setFlash("Profil mis à jour !");
} else {
$this->Session->setFlash("Impossible de sauvegarder !");
}
if ($passError) {
$this->User->ValidationErrors'pass2'] = array("Le mot de passe n'est pas identique");
}
} else {
$this->request->data = $this->User->read();
}
}
et l'erreur que CakePHP m'affiche :
Notice (8): Indirect modification of overloaded property User::$ValidationErrors has no effect [APP\Controller\UsersController.php, line 135]
Cette erreur arrive quand je rentre des mots de passe différents.
Une idée ? Merci !
Voici la fonction du tuto
function edit(){
$user_id = $this->Auth->user('id');
if(!$user_id){
$this->redirect('/');
die();
}
$this->User->id = $user_id;
$passErrors = false;
if($this->request->is('put') || $this->request->is('post')){
$d = $this->request->data;
$d'User']'id'] = $user_id;
if(!empty($d'User']'pass1'])){
if($d'User']'pass1'] == $d'User']'pass2']){
$d'User']'password'] = Security::hash($d'User']'pass1'],null,true);
}else{
$passErrors = true;
}
}
if($this->User->save($d,true,array('firstname','lastname','password'))){
$this->Session->setFlash("Votre compte a bien ete modifié","notif");
}else{
$this->Session->setFlash("Impossible de sauvegarder","notif",array('type'=>'error'));
}
if($passErrors){
$this->User->validationErrors'pass2'] = array('Les mots de passe ne correspondent pas');
}
}else{
$this->request->data =$this->User->read();
}
$this->request->data'User']'pass1'] = $this->request->data'User']'pass2'] = "";
}
Je n'ai plus d'erreur. Mais le message disant que les mots de passe sont différents ne s'affiche pas ..
Ok je crois que je viens de trouver a la place de if ($this->request->is('put')) mets
if ($this->request->is('put') || $this->request->is('post'))
Non, ça change rien !
Je met exactement le même code que dans le tuto c'est pas normal :( Help LeRaton !