Bonjour à tous,

Je suis en train de réaliser un système de questions/réponses sur un article commandé.
J'aimerais qu'un utilisateur puisse poser une question sur un produit. Une fois la question posée je sélectionne la liste des autres utilisateurs ayant acheté ce produit avec un certain critère et je les envoie un mail pour qu'il puisse répondre à la question. J'ai fait mon traitement mais je n'arrive pas à envoyer mon mail. Pourtant la question elle est bien enregistrée en base de données seulement le mail qui n'est pas envoyé. Le message d'erreur que j'obtienne m'indique que mes variables sont "indifined" dans le template d'email. Je n'arrive pas à mettre le doigt sur l'origine. Est-ce l'erreur vient d'ailleurs puisque mes variables sont bien définis ou un autre dysfonctionnement ? J'ai besoin d'aide. Merci par avance !

CI-dessous mon code :

Mon formType:

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
 
namespace AppBundle\Form;
 
use AppBundle\Entity\Question;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\OptionsResolver\OptionsResolver;
use Symfony\Component\Form\Extension\Core\Type\TextareaType;
use Symfony\Component\Form\Extension\Core\Type\TextType;
 
class QuestionType extends AbstractType
{
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder
            ->add('username', TextType::class)
            ->add('title', TextType::class)
            ->add('content', TextareaType::class)
        ;
    }
 
    public function configureOptions(OptionsResolver $resolver)
    {
        $resolver->setDefaults(array(
            'data_class' => Question::class,
        ));
    }
}
Mon formulaire:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
 
{{ form_start(form) }}
    {{ form_widget(form.username) }}
    {{ form_widget(form.title) }}
    {{ form_widget(form.content) }}
 
    <input type="submit" value="Send"/>
{{ form_end(form) }}
Mon controller :

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
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
 
public function newAction(Request $request)
{
    $question = new Question();
    $form = $this->createForm(TblQuestionType::class, $question);
    $form->handleRequest($request);
 
    if ($form->isSubmitted() && $form->isValid()) {
        $em = $this->getDoctrine()->getManager();
        $em->persist($question);
        $em->flush();
 
        $title = $request->request->get('title');
        $content = $request->request->get('content');
        $ref = $request->query->get('ref');
 
        // requêtes pour récupérer les emails utilisateurs
        $qb = $em->createQueryBuilder();
 
        $query1 = $qb->select('n')
            ->from('AppBundle\Entity\Note', 'n')
            ->where('n.ref = :ref')
            ->andWhere('n.note = 2 OR n.note is null')
            ->setParameter('ref', $ref)
            ->getQuery()
            ->getDQL();
        $query2 = $qb->select('m')
            ->from('AppBundle\Entity\SendMail', '')
            ->where('m.rob = :rob')
            ->setParameter('rob', '1')
            ->getQuery()
            ->getDQL();    
        $queries = $qb->select('c.commandeId', 'c.dateExpe', 'u.userId', 'u.email')
            ->from('AppBundle\Entity\Commande', 'c')
            ->join('AppBundle\Entity\Users', 'u', 'WITH', $qb->expr()->eq('c.userId', 'u.userId'))
            ->where($qb->expr()->andX(
                $qb->expr()->in('c.commandeId', ':query1'),
                $qb->expr()->notIn('u.email', ':query2')
            ))
            ->andWhere(date_diff(D, 'c.dateExpe', NOW()) > 5)
            ->setParameters('query1', $query1)
            ->setParameters('query2', $query2)
            ->getQuery()
            ->getResult();    
 
            $message = \Swift_Message::newInstance();
            $message->setSubject('Envoi mail');
            $message->setFrom(array('noreply@domaine.com' => 'domaine'));
            foreach ($queries as $query) {
                $email = $query->getEmail();
                $username = $query->getUsername();
                $message->setTo($email);
            }    
            $message->setBody($this->renderView('mail_user.html.twig', array(
                'username' => $username,
                'title' => $title,
                'content' => $content
            )));
            $message->setCharset('utf-8');
            $message->setContentType('text/html');
 
            $this->get('mailer')->send($message)
 
 
      $response = new JsonResponse();
      $response->setData(array(
                'formSuccess' => $this->render('layout.html.twig', array(
                        'form' => $form->createView())
                ),
                'successMessage' => 'Success d\'envoi'
            ));
            return $response;      } else {
     $response = new JsonResponse();      $response->setData(array(
                'formErrors' => $this->render('layout.html.twig', array(
                        'form' => $form->createView())
                ),
                'errorMessage' => 'Echec lors d\'envoie'
                //$this->addFlash('warning', $translator->trans('c2c.message_error'))
            ));
            return $response;    }
 
}
Mon template mail :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
 
{% block mail %}
    {{ username }}
    {{ title }}
    {{ content }}
{% endblock %}