Salut à tous,

Voila, j'ai un form (avec un seul champ 'Content') le form pointe sur la page elle même. Globalement il fonctionne bien mais quand je tape quelque chose et que j'envoie il m'enregistre bien les données pas de problème mais au rechargement de la page il m'affiche ce que je viens d'envoyer dans le champ Content !

Voici 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
    /**
     * @Route("/messages/{id}", name="messages_show", methods={"GET","POST"})
     * 
     * @IsGranted("ROLE_USER")
     */
    public function show(Request $request, User $user): Response
    {
        $message = new Message();
        $message->setAuthor($this->getUser());
        $message->setrecipient($user);
 
        $form = $this->createForm(MessageType::class, $message);
        $form->handleRequest($request);
 
        if ($form->isSubmitted() && $form->isValid()) {
            $entityManager = $this->getDoctrine()->getManager();
            $entityManager->persist($message);
            $entityManager->flush();
        }
 
        // on marque tous les messages comme lus car l'utilisateur est sur la conversation
        $listeMessages = $this->repository->getMessagesFor($this->getUser()->getId(), $user->getId());
        $entityManager = $this->getDoctrine()->getManager();
 
        foreach ($listeMessages as $msg) {
            // si le destinataire est le même que l'utilisateur connecté alors on ajoute 
            // une date de lecture aux messages qui ne sont pas lu.
            if ($msg->getrecipient()->getId() == $this->getUser()->getId() && $msg->getReadAt() == null) {
                $msg->setReadAt(new \DateTime());
            }
        }
 
        $entityManager->flush();
 
        return $this->render('message/show.html.twig', [
            'user' => $user,
            'form' => $form->createView(),
            'messages' => $this->repository->getMessagesFor($this->getUser()->getId(), $user->getId())
        ]);
    }
et la vue :

Code twig : 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
{% extends 'base.html.twig' %}
 
{% block title %}Messages {{ user.firstName }}{% endblock %}
 
{% block body %}
 
<div class="container">
    <div class="card">
        <div class="card-header">{{ user.firstName }}</div>
        <div class="card-body">
 
            {% for data in messages %}
 
            <div class="raw">
                <div class="col-md-10 {{ data.author.id == app.user.id ? 'offset-md-2 text-right' : '' }}">
                    <p>
                        <strong>{{ data.author.id == app.user.id ? 'Moi' : data.author }}</strong><br>
                        {{ data.content|nl2br }}<br>
 
                        {% if data.author.id == app.user.id %}
                            {% if data.readAt != null %}
                                <small>lu le {{ data.readAt|date('Y-m-d H:i:s') }}</small>
                            {% else %}
                                <small>non lu</small>
                            {% endif %}
                        {% endif %}
                    </p>
                </div>
            </div>
 
            <hr>
 
            {% endfor %}
            <h2>Nouveau message :</h2>
 
            {{ form_start(form) }}
            {{ form_row(form.content) }}
            <button class="btn btn-primary">Envoyer</button>
            {{ form_end(form) }}
        </div>
    </div>
</div>
 
{% endblock %}

Quelqu'un a t'il une idée ? J'ai loupé quelque chose ? je vous remercie.