IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Symfony PHP Discussion :

Problème avec getPresentationFor depuis un plugin [1.x]


Sujet :

Symfony PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Août 2006
    Messages
    38
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Août 2006
    Messages : 38
    Par défaut Problème avec getPresentationFor depuis un plugin
    Bonjour à tous.

    J'ai un petit soucis avec la méthode GetPresentationFor() qui sert à retourner la réponse d'une action.

    J'aimerais envoyer des emails html quand certains évènements se produisent. Pour cela, j'ai créé une classe Mailer hérité de Swift_Message. Cette classe permet de renseigner automatiquement le sujet, de créer le rendu avec GetPresentationFor, etc.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    <?php 
     
    	class Mailer extends Swift_Message
    	{
    	    static public function getMailSubject($action)
    	    {
    		    $subject = array();
    		    $subject['register'] = "Bienvenue !";
    		    $subject['forgotPassword'] = "Oubli de mot de passe";
     
    		    if(isset($subject[$action]))
    			    return $subject[$action];
    			else 
    				return 'MonSite';
    	    }
     
    	    public function sendMessage($to, $action, $param)
    	    {    	
    	    	foreach($param as $key => $value)
    	    		sfContext::getInstance()->getRequest()->setParameter($key, $value);
     
    		    $this->setFrom(sfConfig::get('app_mailer_from'), sfConfig::get('app_mailer_name'));
    		    $this->setTo($to);
    		    $this->setSubject(Mailer::getMailSubject($action));
     
    		    $this->setContentType("text/html");
    		    $this->setBody(sfContext::getInstance()->getController()->getPresentationFor('mail', $action));
     
     
    		    //On envoi du mail
    		    //sfContext::getInstance()->getMailer()->send($this);
    	    }
    	}
     
    ?>
    Pour envoyer un mail, je n'ai donc qu'a créer un objet Mailer et à appeler la méthode sendMessage dans une action quelconque.
    Par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    public function executeIndex($request)
    {
        $param = array('id' => 1);
        //On envoi le mail
        $mail = new Mailer();
        $mail->sendMessage('email@host.com', 'register', $param);
    }
    La classe Mailer va donc automatiquement envoyer un email à 'mail@host.com'. Le contenu de ce mail sera la réponse de l'action 'register' du module 'mail'

    Voici donc le contrôleur du module 'mail'
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    <?php
     
    class mailActions extends sfActions
    {
      public function preExecute()
      {
        $this->setLayout('layout_mail');
      }
     
      public function executeRegister(sfWebRequest $request)
      {
      	$this->user = Doctrine::getTable('User')->find($request->getParameter('id'));
      }
    }
     
    ?>
    Ici, le template 'registerSuccess'
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    <div style="margin: 0;">
    	<h2 style="font-size: 12px;background-color: #F6F6F6;border-top: 1px solid #E1E1E1;padding: 5px;margin: 0;color:#000!important;">Inscription &agrave; la b&ecirc;ta de MonSite</h2>
    	<p style="padding: 7px 10px;margin:0;">Bonjour <?php echo $user->getName(); ?> et bienvenue sur MonSite !</p>
    	<p style="padding: 7px 10px;margin:0;">Ce mail vous confirme votre inscription r&eacute;cente &agrave; la b&ecirc;ta du site. Vous pouvez d&egrave;s &agrave; pr&eacute;sent naviguer sur le site.<br />N'oubliez pas de nous faire vos retours, positifs comme n&eacute;gatifs sur le design, l'ergonomie, les fonctionnalit&eacute;s, etc.</p>
    	<p style="padding: 7px 10px;margin:0;">L'&eacute;quipe de MonSite vous remercie de votre contribution.</p>
    </div>
    Et enfin, le 'layout_mail' qui encapsule le template register
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//FR" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
        <title>WeGuide:</title>
    	<style type="text/css">
    .ExternalClass {width:100%;}
    .ExternalClass, .ExternalClass p, .ExternalClass span, .ExternalClass font, .ExternalClass td, .ExternalClass div {	line-height: 100%;} 
    	</style>
    </head>
    <body style="-webkit-text-size-adjust:none;-ms-text-size-adjust:none;margin: 0;padding: 0;font: 12px Verdana;">
    	<div id="mail_wrapper" style="border: 1px solid #E1E1E1;">	
    		<div style="height: 97px;padding:10px;margin: 10px;">
    			<img src="http://127.0.0.1:8080/images/logo.png" alt="MonSite" style="margin:0;padding:0;height: 97px;display:inline;vertical-align:middle;" />
    			<h1 style="font-family: Calibri, Arial, Verdana;font-weight: normal;font-size: 50px;margin: 0 25px;color:#333;height: 97px;display:inline;vertical-align:middle;">MonSite</h1>
    		</div>
     
     
    		<div>	
    			<?php echo $sf_content ?>			
    		</div>
     
    		<div style="border-top: 1px solid #E1E1E1;background-color: #F6F6F6;padding: 3px 0;text-align: center;">
    			&copy; <a href="http://monsite.fr" style="color: #585;"><b>MonSite</b></a> - 2011
    		</div>
    	</div>		
    </body>
    </html>
    L'avantage de ce système est qu'il permet (entre autre) de mettre un décorateur 'layout_mail' commun à tous mes email. ça marche bien lorsque je veux envoyer le mail à partir de n'importe quelle action de mon application.

    Le problème, c'est que lorsque j’envoie le mail à partir d'une action d'un plugin (sfGuardForgotPassword), il me met une page blanche (même en frontend_dev).
    Après avoir débuggué manuellement, je me rend compte que ça plante au setBody de la méthode sendMessage de la classe Mailer à cause de ce bout de code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sfContext::getInstance()->getController()->getPresentationFor('mail', $action)
    Je ne comprend absolument pas pourquoi il n'arrive pas à exécuter cette méthode getPresentationFor à partir du plugin... Pourtant, je suis bien dans l'application frontend... il ne devrait pas y avoir de problème.

    Avez-vous une idée de où cela peut bien venir ?
    Black Templar

  2. #2
    Membre chevronné
    Inscrit en
    Août 2007
    Messages
    360
    Détails du profil
    Informations forums :
    Inscription : Août 2007
    Messages : 360
    Par défaut
    Bonjour,

    As tu essayé de voir ce que contient ton controlleur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    sfContext::getInstance()->getController();
    Je crois que le problème se situe ici, mais ce n'est qu'un hypothèse...

    Cordialement,

    Mathieu

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Août 2006
    Messages
    38
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Août 2006
    Messages : 38
    Par défaut
    En effet, c'est ici que se situe le problème.

    sfContext::getInstance() marche correctement, m ais dès que je fais un getController(), ça bug... Par contre, je ne sais absolument pas ce que ça signifie, ni comment résoudre ou contourner le probème :/

    EDIT : par contre, j'arrive à écrire ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sfContext::getInstance()->getController()->actionExists('mail', $action);
    Là, il me dit que l'action existe bien !! :/ étrange étrange !

  4. #4
    Expert confirmé
    Avatar de Michel Rotta
    Homme Profil pro
    DPO
    Inscrit en
    Septembre 2005
    Messages
    4 954
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : DPO
    Secteur : Distribution

    Informations forums :
    Inscription : Septembre 2005
    Messages : 4 954
    Par défaut
    Quel est le symptôme ? Le message d'erreur ? Dans quel code il beug ?

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Août 2006
    Messages
    38
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Août 2006
    Messages : 38
    Par défaut
    Bonjour,

    Citation Envoyé par Michel Rotta Voir le message
    Quel est le symptôme ? Le message d'erreur ? Dans quel code il beug ?
    • Le symptôme : une page blanche, aucun code html généré (que ce soit en dev ou en prod)
    • Le message d'erreur : aucun (j'ai une page blanche en dev !!!)
    • Le bug à lieu lorsque je souhaite récupérer mon mot de passe via le plugin sfGuardUser (sfGuardForgotPassword) : lorsque je renseigne mon mail, que je clique sur le bouton de validation du formulaire, que le mail est présent en base de donnée et que j'essaye donc d'envoyer un mail avec la procédure à suivre... (plus précisement quand je fais un sfContext::getInstance()->getController()->getPresentationFor('mail', $action) )


    Black Templar

  6. #6
    Membre émérite Avatar de kenny.kev
    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    646
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Janvier 2007
    Messages : 646
    Par défaut
    Citation Envoyé par Black Templar Voir le message
    • Le message d'erreur : aucun (j'ai une page blanche en dev !!!)

    Il ne faut pas que t'oublie que toutes les erreurs sont logué dans error.log d'apache, tu as donc forcément un message d'erreur.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [GIMP] Problème avec brosse depuis v. 2.8.2
    Par Jon Shannow dans le forum Multimédia
    Réponses: 2
    Dernier message: 12/03/2013, 10h14
  2. Problème avec Windows depuis installation de Linux
    Par maoui05 dans le forum Windows Vista
    Réponses: 1
    Dernier message: 03/06/2010, 19h24
  3. Réponses: 10
    Dernier message: 16/11/2009, 15h14
  4. [PDO] Problème avec PDO depuis migration
    Par XData dans le forum PHP & Base de données
    Réponses: 8
    Dernier message: 23/07/2009, 16h33

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo