Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
bonjour,
je souhaiterais mettre en place un système de notification par e-mail lorsque qu'une personne fait une demande en ligne pour un service particulier.
Lorsque la demande est créée, un mail est transmis au service compétent pour les prévenir de la demande et le demandeur se voit également destinataire de ce mail pour accuser réception de sa demande.
Ma question :
Où créer le script de notification sachant qu'il est appelé depuis une action d'un controller ?
Doit-il être sous la forme d'une action dans le même controller ?
Doit-il être sous la forme d'une aide d'action ?
Ou sous une autre forme ?
Merci de m'éclairer de vos lumières bien avisées ;-).
Dernière modification par loriv (12-02-2010 15:31:20)
Hors ligne
Bonjour,
Cela fais quelques jours que j'ai crée une application semblable,bon la meilleur méthode c'est de créer une classe indépendant puis tu appelle les fonctions de cet classe dans les actions de ton contrôleur comme ça tu auras un code plus propre et en plus tu éviteras d'avoir "The Fat Stupid Ugly Controller"....
si tu auras besoin d'une autre aide à propos de l'application alors tu n'as qu'à le poser.
A+.Nll
Dernière modification par elec (04-02-2010 12:59:06)
Hors ligne
Merci Elec pour ta réponse et l'aide que me proposes.
Je vais de ce pas créer une classe 'notification.php'dans le répertoire suivant :
MonProjet___
|__Application
|__library
|
|-----Notification.php
Hors ligne
Bonsoir,
De rien,mais une petite remarque il ne faut pas mettre ta classe dans "library" mais plutôt "application/models" ou en général dans "/application" ou un dossier comme "application/notification"(enfin selon ta configuration) ,dans le dossier "library" on met par exemple la librairie Zend ou Plugins...
Voilà deux liens très importants pour toi :
Data mapping
Un site très important
Enfin pour connaitre mieux la configuration de Zend et le POO en PHP.
A+.Nll
Dernière modification par elec (04-02-2010 16:13:14)
Hors ligne
Une classe comme Notification fait vraiment partie du Model ? Ne peut -il pas créer une librairie propre à _cette_ application dans laquelle il met toutes les classes qu'il a besoin ? Une sorte de boite à outils..
(C'est une question que je me pose également pour mon application)
Hors ligne
Je pars effectivement sur un répertoire comme ceci :
MonProjet___
|__Application
|__library
|-------MonProjet
|--------classNotification.php
Justement pour ne pas pourrir les scripts MVC.
A la rigueur, si ça se complique, je pourrais même y créer un package Notification .
Merci et à +
Hors ligne
Bonjour,
Je suis d'accord avec Slaughter,mais enfin c'est ton choix!!
A+.Nll
Hors ligne
dès que je termine ma classe 'Notification', si j'y arrive, je la mets sur cette discussion , on en reparle et je flaggerai à [résolu] le post.
Merci à vous.
A+
Hors ligne
Appel depuis un controller :
............. ............. // Sauvegarde des informations $lastId=$interv->save(); //Notifier au demandeur la création ou l'update $c=new ZF01LR_Notification($lastId); if ($c->notifOK){ $flashMessenger=$this->_helper->getHelper('FlashMessenger'); $flashMessenger->setNameSpace('notification'); $flashMessenger->addMessage($c->notifOK); }
ci dessous mon fichier 'Notification.php'
class ZF01LR_Notification { public $notifOK; protected $idInterv; protected $rowInterv; function __construct($Interv){ $this->idInterv=array('txtNumInterv'=>$Interv); $TInterv = new Model_DbTable_TInterv(); $this->rowInterv = $TInterv->getList($this->idInterv); $this->getContent(); } function getContent(){ // Construction du detail de la demande // Pour le corps du message. $url=Zend_Controller_Front::getInstance()->getBaseUrl(); $htmlContent="<a href= 'http://ledomaine.fr".$url."/interv/edit/i/".$this->idInterv['txtNumInterv']."'>http://ledomaine.fr".$url."/interv/edit/i/".$this->idInterv['txtNumInterv']."</a>"; $htmlContent.="<br><br><html><body><div><strong>Description de la demande</strong></div><br> <span style='font-weight:bold; text-decoration:underline; '>Objet:</span>".$this->rowInterv[0]['objet']."<br> <span style='font-weight:bold; text-decoration:underline; '>Demandeur:</span>".$this->rowInterv[0]['melDemandeur']."<br> <span style='font-weight:bold; text-decoration:underline; '>Description:</span><br>".nl2br($this->rowInterv[0]['description'])."<br> </body></html> "; // Destinataire $email = Zend_Auth::getInstance()->getIdentity()->email."@ledomaine.fr"; // Transport à utiliser pour l'envoi $transport = new Zend_Mail_Transport_Smtp('smail.ledomaine.fr',array('auth'=>'plain', 'username'=>'loriv', 'password'=>'pwdloriv') ); // Construction de l'e-mail $mail = new Zend_Mail('UTF-8'); $mail->setSubject('[ZF01LR #'.$this->idInterv['txtNumInterv'].']') ->setFrom('ne_pas_repondre@ledomaine.fr', 'ne pas repondre') ->addTo($email) ->setBodyHtml($htmlContent,'UTF-8',ZEND_MIME::ENCODING_8BIT); // Envoi try{ $mail->send($transport); }catch(Zend_Mail_Exception $e){ //TODO Des fois que le serveur SMTP soit aux fraises } $this->notifOK="Un message de confirmation sera envoyé à l'adresse suivante :".$email; } }
S'il y a des remarques, je prends ...
A+
Hors ligne
Bonjour loriv
Il y'a t- il pas de faute sur la première ligne du controller. j'ai essayé d’intégrer ce code dans mon projet il m'affiche un Warning a ce niveau $lastId=$interv->save(); en soulignant en jaune $interv.
Merci
Hors ligne
Le code n'est pas à utiliser tel quel,
$lastId=$interv->save(); sert à faire une insertion en base et à récupéré l'id si tu n'as pas d'enregistrement en base à faire cette ligne n'est pas utile (et dans tous les cas il faudrait l'adapter et déclarer $interv, etc auparavant).
Hors ligne