Ca correspond à quelle ligne de ton code la ligne 135?
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 !
18 réponses
La ligne 34.
Le message d'erreur ne s'affiche pas.
Enleve la majuscule $this->User-> V alidationErrors'pass2'] ça devrait marcher
Je n'ai plus d'erreur. Mais le message disant que les mots de passe sont différents ne s'affiche pas ..
fais un debug de $parsError voir si i lest bien sur true?
je met debug($passError); ou ?
Je dois mettre quoi exactement ?
Mets le au dessus du if($passError)
Cela n'affiche rien du tout ..
Dans le if fais un debug($data) pour voir si il passe bien dans la condition
Ca m'affiche rien <<
Up s'il vous plaît !
fais le avant le if pour voir si tu passes dans ta condition if($passError)
Toujours rien -_-
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 !
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'] = "";
}
C'est bon j'ai trouvé ! Merci :)