Bien le bonjour,
Je viens chercher de l'aide auprès de vous. (mes recherches sur le net concernant mon problème étant infructueuse).
Je suis actuellement en fin de stage en développement web. Je dois migrer un site déjà existant sous Symfony 1.4 et je rencontre un soucis au niveau de mon envoie de mail.
On va dire que tout fonctionne car le mail est bien envoyé, il est bien reçu également avec les bons champs, sauf que le corps du message ne contient que la première ligne. A partir du moment où je fais un retour à la ligne, le reste n'est pas transmis.. Il me faut donc trouver un moyen pour que la variable contenant le message retienne tout le champ et non juste la première ligne, et c'est la que je coince :s
Voici quelques morceaux de mon code pour tenter de vous éclairer
Mon formulaire est créé(voici les widgets de mon formulaire, je vous épargne tout le reste ^^)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 $this->setWidgets(array( 'pseudo' => new sfWidgetFormInputText(array('default' => 'Pseudo'), array('onclick' => 'this.value = "";')), 'email' => new sfWidgetFormInputText(array('default' => 'Email'), array('class' => 'email','onclick' => 'this.value = "";')), 'desti' => new sfWidgetFormSelect(array('choices' => self::$destinataire)), 'sujet' => new sfWidgetFormInputText(array('default' => 'Titre'), array('onclick' => 'this.value = "";')), 'message' => new sfWidgetFormTextarea(array(), array('size' => '20x5')), ));
Voici le code envoyant le mail présent dans mon contrôleur (le formulaire est appelé dans l'action index, qui envoie le résultat s'il est passé par POST à l'action d'envoie contenant ce code)
Et la partie vue contenant l'appel de mon formulaire (c'est la vue de l'action index, où le formulaire est appelé):
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 $email = $this->getMailer()->compose( array($request->getParameter('email') => $request->getParameter('pseudo')), $request->getParameter('desti'), $request->getParameter('sujet'), $request->getParameter('message') ); $this->getMailer()->send($email);
Lors de mes recherches, j'avais vu cette fonction PHP nl2br() qui insère un retour à la ligne HTML à chaque nouvelle ligne. Mais je ne vois pas vraiment comment l'appliquer sur le champ d'un formulaire :/ (et je suis pas sur que ca résoudra mon problème :p)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 <form action="<?php echo url_for('contact/index') ?>" method="POST"> <table> <?php echo $formulaire ?> <tr> <td colspan="2"> <input type="submit" /> </td> </tr> </table> </form>
J'ai continué de mon côté pour tenter de trouver d'où ca peut venir, et j'ai peut-être trouver le soucis. Je m'explique :
Quand je regarde dans la debug toolbar de Symfony, dans config/request au moment où je me rends sur la page contact, j'ai ca :
Ce qui est normal, car pour le moment n'est rien envoyé.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 parameterHolder: action: index module: contact
Une fois que je remplis mon formulaire et que je l'envoie en POST (il renvoit vers l'action index et son controleur vérifie si les informations viennent de la méthode POST, et si oui, il valide le formulaire). Et voici ce que ca donne une fois le formulaire envoyé:
Donc l'envoie du formulaire contient bien toutes les informations. Une fois qu'il est validé, il est envoyé vers la seconde action qui envoit le mail et qui affiche un récapitulatif des informations envoyées, mais voici ce qu'il ressort de la debug toolbar :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 parameterHolder: action: index contact: pseudo: 'Mon pseudo test' email: <une adresse mail> desti: <une adresse mail> sujet: 'Mon sujet test' message: "Mon message test,\r\nbonjour\r\nblabla\r\nmerci" _csrf_token: 7150b60b8374600f3e2545379ba5670f } module: contact
Tout est envoyé correctement sauf pour le champ "message". Il semblerait donc que le \r soit ce qui pose problème..
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 parameterHolder: action: merci desti: <une adresse mail> email: <une adresse mail> message: 'Mon message test,' module: contact pseudo: 'Mon pseudo test' sujet: 'Mon sujet test'
Je suppose que Symfony ne doit pas accepter qu'il y ait de \ qui se balade dans les champs(d'ailleurs, si je me trompe pas, il y a les protections XSS de Symfony qui sont en action, peut-être pour ca que tout ce qui est après le \ soit supprimé?)
Je ne sais pas si je suis sur la bonne piste, mais ca me semblerait logique. Si quelqu'un a une idée pour résoudre ce problème, je suis prenneur ^^
Bonne fin de journée
Thony alias l'Hardy
Partager