Bonjour,

Avec le module Security, j'ai créé un formulaire de demande de modification du mot de passe suite à son oubli par l'utilisateur. Voici la fonction qui s'en charge :

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
83
84
85
86
87
88
89
90
91
 
    /**
     * 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 ObjectManager $manager
     * @param UserRepository $userRepository
     * 
     * @return Response
     */
    public function resetingRequest(Request $request, \Swift_Mailer $mailer, TokenGeneratorInterface $tokenGenerator, ObjectManager $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) 
            {
 
                $this->addFlash('warning', "The email address isn't linked to a Roadtrip user.");
 
                return $this->redirectToRoute("security.resetting");
 
            }
            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('warning', "Impossible to send a confirmation email to change your password.");
 
                    return $this->redirectToRoute("security.resetting");
 
                }
 
            }
 
        }
 
        return $this->render('security/passwordResettingRequest.html.twig', ['form' => $form->createView()]);
 
    }
Mon problème est que lorsque l'adresse email est erronée

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
 
            if (! $user) 
            {
 
                $this->addFlash('warning', "The email address isn't linked to a Roadtrip user.");
 
                return $this->redirectToRoute("security.resetting");
 
            }
Je reçois l'erreur suivante :

Some mandatory parameters are missing ("id", "token") to generate a URL for route "security.resetting".
Je ne vois pas comment résoudre ceci, mon but étant, dans ce cas, de ré-afficher le formulaire en faisant apparaître un message comme quoi l'adresse email est invalide.

Quelqu'un aurait une idée?

Merci d'avance pour votre aide.