Bonjour,

J'utilise la version 4.3.9 de Symfony.

Lors de l'envoi d'un formulaire, je veux avertir l'utilisateur du statut de sa demande. Pour ce faire, je tente d'utiliser les messages flash, mais ils ne sont pas affichés.

Voici le code de la fonction de mon controller :


    /**
     * User request to change its password
     * 
     * @Route("/security/resetting/request", name="security.resetting.request")
     *
     * @param Request $request
     * @param \Swift_Mailer $mailer
     * @param TokenGeneratorInterface $tokenGenerator
     * @param EntityManagerInterface $manager
     * @param UserRepository $userRepository
     * 
     * @return Response
     */
    public function resetingRequest(Request $request, \Swift_Mailer $mailer, TokenGeneratorInterface $tokenGenerator, EntityManagerInterface $manager, 
                                    UserRepository $userRepository): Response
    {

        $administrator = $userRepository->findOneBy(array('name' => 'administrator'));

        $form = $this->createFormBuilder()
                     ->add('email', EmailType::class, ['constraints' => [
                                                                            new Email(),
                                                                            new NotBlank()
                                                                        ]
                                                      ]
                          )
                     ->getForm();

        $form->handleRequest($request);

        if ($form->isSubmitted() && $form->isValid()) 
        {

            $user = $manager->getRepository(User::class)->loadUserByEmail($form->getData()['email']);

            if (! $user) 
            {
                \dump($user);
                $this->addFlash('error', "The email address isn't linked to a Roadtrip user.");

                //return $this->redirectToRoute("security.resetting.request");

            }
            else
            { 

                $user->setToken($tokenGenerator->generateToken());
                $user->setPasswordRequestedAt(new \Datetime());
                $manager->flush(); 

                $mail = new Mail;

                $mail->setReceiver($user)
                    ->setSubject($this->getParameter('password_Resetting_email_subject'))
                    ->setSender($administrator)
                    ->setMessage('Password renew')
                    ->setBody($this->renderView(
                                                    'security/passwordResettingEmail.html.twig', 
                                                    ['mail' => $mail]
                                                )
                                )
                ;

                if ($mail->sendEmail($mailer))
                { 

                    $manager->persist($mail);
                    $manager->flush();

                    $this->addFlash('success', "An email has been sent to the registered email address in your account so you can change your password.");

                    //return $this->redirectToRoute("security.login");

                }
                else
                {

                    $this->addFlash('error', "Impossible to send a confirmation email to change your password.");

                    //return $this->redirectToRoute("security.resetting.request");

                }

            }

            return $this->redirectToRoute("security.resetting.request");

        }

        return $this->render('security/passwordResettingRequest.html.twig', [
                                                                                'form' => $form->createView(),
                                                                                'bodyId' =>  'secutityResettingRequest'
                                                                            ]
                            )
        ;

    }

Voici maintenant le code de mon template :


{% extends 'base.html.twig' %}

{% block title %}
    Roadtripr - Password ressetting request
{% endblock %}

{% block body %}
    {% for label, messages in app.flashes %}
        {% for message in messages %}
            <div class="flash-{{ label }}">
                {{ message }}
            </div>
        {% endfor %}
    {% endfor %}
...

Quelqu'un aurait une idée sur la provenance du problème?

Merci d'avance pour votre aide.

1 réponse


dubitoph
Auteur
Réponse acceptée

Le problème provient du fait que mon base.html.twig contient des formulaires en mode modal qui eux-mêmes affichent les messages flash qui ne sont pas affichés si le modal n'est pas appelé.