Précédent   Forum des professionnels en informatique > PHP > Outils > Zend > Zend Framework > MVC
MVC Forum de support sur le développement d'applications de type modèle-vue-contrôleur avec Zend Framework ainsi que vos questions sur les plugins, les helpers etc. Avant de poster -> Cours MVC, FAQ ZF Controller
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 20/06/2011, 10h21   #1
Membre du Club
 
Inscription : mars 2007
Messages : 110
Détails du profil
Informations forums :
Inscription : mars 2007
Messages : 110
Points : 50
Points : 50
Par défaut view helper dans un modèle (pour l'envois d'un mail)

Bonjour,

J'envoie un mail à partir d'un modèle.
Lorsque je définis le contenu du mail, j'aimerais utiliser des aides de vues. (ce que j'aurais pu faire dans le controller avec $this->view ou dans la vue sur $this).

Voilà le code (qui marche dans le controller mais pas dans le modèle)
Code :
$mail->setBodyHtml('$this->view->url(array('questionId'=>32, 'userId'=>23),'social-showquestionsent')')
J'ai aussi essayé de créer une instance de la vue, sans succès:
Code :
$view = new Zend_View_Interface;
Il y a t-il une "technique" pour appeler les helpers de vues dans un modèle?
hackiles est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/06/2011, 17h47   #2
Membre confirmé
 
Patrick Barroca
Inscription : mai 2008
Messages : 178
Détails du profil
Informations personnelles :
Nom : Patrick Barroca

Informations forums :
Inscription : mai 2008
Messages : 178
Points : 204
Points : 204
Hello,

Je réagis à ta question car la réponse est déjà dedans

Comment fait-on pour utiliser une aide de vue dans un model ? Hé bien on ne fait pas, sinon ça s'appelerait des aide de model

Plus sérieusement, ce que tu essayes de faire est une erreur courante, si dans le modèle Zend MVC, la vue est une propriété du controller ce n'est pas par hasard.

Le model ne doit pas se préoccuper de la mise en forme, c'est le soucis de la vue.
Le model ne doit pas se préoccuper d'envoyer ou pas un mail, c'est le soucis du controller.

En gros, reviens à l'architecture MVC*normale, un controller demande des infos au model et fait un rendu de vue avec ces infos, il utilise ensuite ce rendu comme corps d'un mail.

Tu vas voir que comme ça tout sera plus simple d'un coup

@+
patbator est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/06/2011, 11h43   #3
Membre du Club
 
Inscription : mars 2007
Messages : 110
Détails du profil
Informations forums :
Inscription : mars 2007
Messages : 110
Points : 50
Points : 50
Merci pour ta réponse.

Tu as raison je devrais définir une vue pour chaque email envoyé par l'application (même quand ils sont très simple comme dans mon cas).

Par contre, au niveau MVC, çà ne pose pas de problème d'envoyer des mails à partir des modèles?
hackiles est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/06/2011, 14h18   #4
Membre confirmé
 
Patrick Barroca
Inscription : mai 2008
Messages : 178
Détails du profil
Informations personnelles :
Nom : Patrick Barroca

Informations forums :
Inscription : mai 2008
Messages : 178
Points : 204
Points : 204
Hello,

Bien entendu que c'est un blem d'envoyer un mail à partir d'un model.
Tu devrais avoir une action dans un controller qui correspond à ce que tu essayes de faire.

Cette action instancie le model et passe des données à une vue, en fait le rendu et effectue l'envoi du mail.

Enfin c'est comme ça que je vois les choses pour de l'envoi de Mail en MVC
patbator est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/06/2011, 14h49   #5
Membre du Club
 
Inscription : mars 2007
Messages : 110
Détails du profil
Informations forums :
Inscription : mars 2007
Messages : 110
Points : 50
Points : 50
Même lorsqu'il d'un process?

1) Je demande à un modèle de créer un objet (fonction déclenchée à partir de mon controller).

2) La fonction new() du modèle déclenche tous les process associés à la création de l'objet. Un de ces process est l'envoie d'un mail.

Dans ce cas là, je trouvais que l'envoie du mail avait sa place dans le modèle. Je le code une seule fois et je suis sur qu'à chaque fois que la fonction est appelée, l'email est envoyé.

Car si j'ai bien compris le MVC, le controller ne sert que d'interphase entre les appel http et l'application. Les règles "business" tel que "à chaque fois que tel objet est créer, je dois envoyer un mail" doivent être dans le controller.

Jusqu'à maintenant je passais par le controller mais j'ai l'impression que c'est plus clean via le modèle.
hackiles est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/06/2011, 18h17   #6
Membre confirmé
 
Patrick Barroca
Inscription : mai 2008
Messages : 178
Détails du profil
Informations personnelles :
Nom : Patrick Barroca

Informations forums :
Inscription : mai 2008
Messages : 178
Points : 204
Points : 204
cool, tu nous confies le pourquoi tu envoies un mail à partir de ton model

Pour moi il ne s'agit pas d'une règle qui impacte la création de ton objet mais qui intervient bien à l'appel d'une action de l'utilisateur.

On peut tout à fait imaginer que l'envoi de mail soit optionnel, par exemple si tu fais des instanciations par lot ou pour l'écriture des tests, etc... Bref, j'imagine plein de contextes pour lesquels finalement l'envoi de mail n'est pas toujours lié à l'instanciation.

Donc, pour toi il s'agit de trouver un moyen de t'assurer que lorsqu'on crée un objet par une certaine action dans un certain controller, le mail est envoyé au(x) destinataire(s) prévu(s).

Si c'est un comportement récurrent de créations de plusieurs objets, un action helper pourrait centraliser la création et l'envoi du mail.
Un controller de base dont les controllers créant des objets avec notification mail héritent te permettrait de centraliser l'appel au helper de notification.

Bref, les moyens d'organiser les choses ne manquent pas, héritage, composition et helpers sont là pour éviter la duplication et s'assurer des "comportements" communs de ton appli.

En tous cas, je ne vois pas en quoi du code d'envoi de mail est plus «clean» dans un model.
Je veux dire par là que ton objet s'occupe déjà de son taff «business», je pense pas que tu veuilles en plus qu'il se préoccupe d'envoyer des mails.
patbator est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 21/06/2011, 18h22   #7
Membre du Club
 
Inscription : mars 2007
Messages : 110
Détails du profil
Informations forums :
Inscription : mars 2007
Messages : 110
Points : 50
Points : 50
Tu m'as convaincu et remis dans le droit chemin !

Merci !
hackiles est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 22h22.


 
 
 
 
Partenaires

Hébergement Web