Probleme cake Email

Par arcoss 3x, il y a 10 ans


Bonsoir,
Je suis actuellement en train de creer un formulaire d'inscription et j'ai un probleme lors de l'envoie du mail.
Mail :

Bonjour admin Pour activer ce compte suivez ce lien : Notice (8): Undefined variable: link [APP\View\Emails\html\signup.ctp, line 6] Code Context <p>Pour activer ce compte suivez ce lien : </p> <p><?php echo $this->Html->link('Activer mon compte',$link); ?></p> $viewFile = 'F:\wamp\www\2.7\app\View\Emails\html\signup.ctp' $dataForView = array( 'content' => '', 'username' => 'admin', (int) 0 => array( 'controller' => 'users', 'action' => 'activate', (int) 0 => '33-a2b347966315bd7485521bab9984108b' ) ) $content = '' $username = 'admin' include - APP\View\Emails\html\signup.ctp, line 6 View::_evaluate() - CORE\Cake\View\View.php, line 971 View::_render() - CORE\Cake\View\View.php, line 933 View::render() - CORE\Cake\View\View.php, line 473 CakeEmail::_renderTemplates() - CORE\Cake\Network\Email\CakeEmail.php, line 1708 CakeEmail::_render() - CORE\Cake\Network\Email\CakeEmail.php, line 1561 CakeEmail::send() - CORE\Cake\Network\Email\CakeEmail.php, line 1171 UsersController::signup() - APP\Controller\UsersController.php, line 22 ReflectionMethod::invokeArgs() - [internal], line ?? Controller::invokeAction() - CORE\Cake\Controller\Controller.php, line 490 Dispatcher::_invoke() - CORE\Cake\Routing\Dispatcher.php, line 193 Dispatcher::dispatch() - CORE\Cake\Routing\Dispatcher.php, line 167 [main] - APP\webroot\index.php, line 118 /2.7/users/Activer mon compte This email was sent using the CakePHP Framework

Mon UsersController :

<?php class UsersController extends AppController{ function signup(){ if($this->request->is('post')){ $d = $this->request->data; $d['User']['id'] = null; $d['User']['lastlogin'] = '2015-10-03 12:17:00'; if(!empty($d['User']['password'])){ $d['User']['password'] = Security::hash($d['User']['password'],'sha1',true); } if($this->User->save($d,true,array('username','password','mail'))){ $link = array('controller'=>'users','action'=>'activate',$this->User->id.'-'.md5($d['User']['password'])); App::uses('CakeEmail', 'Network/Email'); $mail = new CakeEmail('default'); $mail->from('noreply@localhost.com') ->to($d['User']['mail']) ->subject('Inscription') ->emailFormat('html') ->template('signup') ->viewVars(array('username'=>$d['User']['username'],$link)) ->send(); $this->Session->setFlash("Votre compte a bien été créé","notif"); }else{ $this->Session->setFlash("Merci de corriger vos erreurs","notif",array('type'=>'error')); } } } }

signup.php :

<p> <strong>Bonjour <?php echo $username; ?></strong> </p> <p>Pour activer ce compte suivez ce lien : </p> <p><?php echo $this->Html->link('Activer mon compte',$link); ?></p>

Merci d'avance pour votre aide !

6 réponses

Lartak, il y a 10 ans

Bonjour.
C'est normal, au lieu de transmettre une variable à ta vue, tu lui transmet un tableau.
Replaces par ceci :

<?php ->viewVars(array('username' => $d['User']['username'], 'link' => $link))

Par contre, l'utilisateur va avoir un soucis avec le lien que tu lui donnes, il faut que tu fasses un lien absolu et non relatif.

arcoss 3x, il y a 10 ans

Bonjour,
Merci pour ton aide je testerai ça qand je rentrerai chez moi ! Par contre quel soucis il va avoir avec mon lien ?

Lartak, il y a 10 ans

Par contre quel soucis il va avoir avec mon lien ?

Au lieu d'avoir le lien par exemple : http://tonsite.tld/users/activate/12-fhdfhfgfkfhfhdfdjd, il va avoir /users/activate/12-fhdfhfgfkfhfhdfdjd.
Il aura un lien relatif et non un lien absolu, ce qui ne lui permettra pas d'arriver sur ton site, que ce soit en copiant le lien ou en cliquant dessus.

arcoss 3x, il y a 10 ans

Merci ca fonctionne mais je n'ai pas mon setFlash affiché après ...

Lartak, il y a 10 ans

As tu bien un élément qui se nomme notif ?
Est-ce que tu as bien ajouté <?= $this->Session->flash() ?> dans ton layout ou sur la vue dans laquelle doit s'afficher le message ?

arcoss 3x, il y a 10 ans

Merci ca fonctionne !!!