Salut à tous,
Voilà j'ai adapté le tutoriel Système de membres avec CakePHP dans mon site fait avec les tutoriaux Développer un site avec CakePHP mais j'ai un petit (gros) problème, quand je créer un nouveau membre et que je clique sur S'enregistrer j'ai le message suivant qui s'affiche
Bonjour Test
Pour activer ce compte suivez le lien :
Fatal error: Call to a member function link() on a non-object in D:\xampp\htdocs\sitew\app\View\Emails\html\signup.ctp on line 6
Normalement c'est le message qu'on reçois par mail, mais moi il me l'affiche dans le navigateur, je ne comprend pas
Merci de votre aide
Warranty
Voici la ligne 6 de mon fichier signup.php
<p><?php echo $this->Html->link('Activer mon compte',$this->Html->url($link,true)); ?></p>
Voilà, enfin j’espère que je me troupe pas :)
->viewVars(array('username'=>$d'User']'username'],'link'=>$link))
Oups désolé :)
Voilà
$link = array('controller'=>'users','action'=>'activate',$this->User->id.'-'.md5($d'User']'password']));
:)
Le truc que je comprend pas c'est qu'il m'affiche "Pour activer ce compte suivez le lien :..." dans le navigateur hors normalement je doit le recevoir par mail.
dsl je ne peux pas beaucoup t'aider je n'ai jamais utilisé l'envoi de mail comme ceci, mais j'ai vu un tutoriel pour envoyer des mails avec cakephp2.0 récemment tu devrait peut être le voir : creation d'un formulaire de contact sous cakephp 2.0
Voilà :)
function signup(){
if($this->request->is('post')){
$d = $this->request->data;
$d'User']'id'] = null;
$d'User']'lastlogin'] = '2009-08-08 12:17:00';
if(!empty($d'User']'password'])){
$d'User']'password'] = Security::hash($d'User']'password'],null,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();
$mail->from('noreply@localhost.com')
->to($d'User']'mail'])
->subject('Test :: Inscription')
->emailFormat('html')
->template('signup')
->viewVars(array('username'=>$d'User']'username'],'link'=>$link))
->send();
$this->Session->setFlash("Votre compte a bien été créé","notif");
$this->request->data = array();
}else{
$this->Session->setFlash("Merci de corriger vos erreurs","notif",array('type'=>'error'));
}
}
}
Oui Cakemail est bien charger j'ai revérifier et j'ai bien le fichier signup.ctp dans /app/View/Emails/html
Bon je vais laisser de coté l'espace membre pour le moment car cela me prend un peu la tête je recommencerai depuis le début plupart
Merci quand même pour votre aide :)
J'ai trouvé la solution : au lieu d'écrire cela,
$link = array('controller'=>'users','action'=>'activate',$this->User->id.'-'.md5($d'User']'password']));
essaye d'écrire cela :
$link = array('controller'=>'users','action'=>'activate','identifiant'=>$this->User->id.'-'.md5($d'User']'password']));
A mon avis cela réglera ton problème, j'ai toujours préféré écrire mes paramètres avec un identifiant, cela fait plus propre et on peut faire de la réécriture d'URL avec cela dans le fichier routes.php même si le lien est dans un email !
Salut !
Je viens d'essayer ta solution mais le problème persiste, il m'affiche toujours le mail dans le navigateur et non pas par mail.
Au sin tu as essayé d'envoyer ton lien sans les paramètres, si il n'y a plus le problème ceci veut dire que le problème viens de tes paramètres, dans ce cas essaye d'écrire une variable avec le user et le mdp concaténé et met le la variable dans ton paramètre.
Elle et pas bête ta solution je viens de faire un test, j'ai supprimer tous les paramètres de CakeMail dans signup et j'ai aucune erreur, certes je ne reçois pas de mail d'activation logique (de toute façon de n'ai jamais réussi à en recevoir) donc le problème vient des paramètres de Cakemail.
Salut désolé pour l'attente, je n'ai pas pu me connecter ce weekend, mais cela fonctionne comme ceci, rajoute des paramètres au fur et à mesure et test, si tu vois une erreur, cela veut dire que l'erreur viens de la dernière instruction que tu as écris cela ciblera mieux le problème.
Il y a des solutions pour ce problème car moi j'ai exactement le même et je panique depuis 3 jours
Salut désolé je viens de voir ton passage, mais je crois que Warranty a du trouver mais n'as pas expliquer sa solution. Sans lui on ne peux pas faire grand chose.
Désolé de cette attente, mais malheureusement je n'ai pas réussi à réglé se problème.
Cordialement, Warranty
Bonjour ! Même Problème !
Pas de message d'erreur mais je suis renvoyer vers le message que l'on reçoit par email !
Salut Il faut plutot que tu ajoutes dans la librairie de CAkeEmail ceci protected
$_helpers = array('Html');
le chemin a suivre : lib/Cake/Network/Email/CakeEmail.php
$_helpers = array('Html');
chez moi il est a la ligne 119 dans ma librairie
Suis-je le seul à trouver bizarre que le link() à un url() ?
T'as essayer de passer de
<p><?php echo $this->Html->link('Activer mon compte',$this->Html->url($link,true)); ?></p>
à
<p><?php echo $this->Html->link('Activer mon compte',$link); ?></p>
en déclarant un 'full_base' dans $link :
$link = array('controller'=>'users', 'action'=>'activate', $this->User->id.'-'.md5($d'User']'password'], 'full_base' => true));
Le full_base permet de donner l'url absolue (comme avec le true en second paramètre à url())
Après, je ne suis pas sûr que c'est la solution à ton problème, mais ça vaut le coup d'essayer.