Bonjour,
j'ai l'erreur suivante Call to a member function link() on a non-object in .... en suivant ce tuto.
J'ai vu à plusieurs reprises que ça pouvait venir du fait que Html n'était pas chargé dans mon controller or je n'ai cette erreur que pour le test de l'envoi de mail et j'ai bien dans AppController la ligne suivante :
public $helpers = array('Text','Form','Html','Session','Cache');
donc je ne pense pas que ça vienne de là.
voici le code où il indique l'erreur c'est mon fichier signup.ctp
<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',$this->Html->url($link,true)); ?></p>
Alors c'est peut-être juste une faute de frappe mais je ne la vois pas.
Au cas ou, voici le code de mon UsersController pour la fonction signup
<?php
class UsersController extends AppController{
function signup(){
if($this->request->is('post')){
$d = $this->request->data;
$d'User']'id'] = null;
if(!empty($d'User']'password'])){
$d'User']'password'] = Security::hash($d'User']'password']);
}
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");
}else{
$this->Session->setFlash("Merci de corriger vos erreurs","notif",array('type'=>'errror'));
}
}
}
J'ai la solution finalement. Alors je regarderai à nouveau le tuto pour voir si j'avais zappé cette ligne mais dans UsersController il faut rajouter
->helpers('Html')
Car comme me l'a expliqué Keisuke (que je remercie) sur l'IRC, CakeEmail ne charge pas les Helpers.
Ensuite j'ai pas mal galéré pour l'envoi du mail avec Sendmail et il s'avère que ça ne fonctionne pas et j'ai donc suivi les conseils donnés ici
(le premier commentaire)