Я пишу метод для запроса сброса пароля в symfony Я получаю электронное письмо пользователя от отправленного значения
$data = $form->getData();
$email=$data['email'];
Кажется, что я получаю хорошее значение электронной почты, и я могу проверить это
dump($email);
, которое возвращает "firstname. name@domain.ext"
Затем я пытаюсь вызвать пользователя в базе данных с помощью
$user=$this->getDoctrine()->getRepository(User::class)->findOneBy(["email" => $email]);
но результат равен нулю.
После этого я пробую 2 разных способа и оба работают отлично, т.е. дают действительного пользователя .
1- Я заменяю
$email=$data['email'];
на $ email = "firstname. name@domain.ext";
2- Я изменяю строку, которая выбирает пользователя:
$user=$this->getDoctrine()->getRepository(User::class)->findOneBy(["email" => "firstname.name@domain.ext"]);
Очевидно, проблема заключается в том, как значение передается в метод findOneBy, а не в том, что пользователь отсутствует в базе данных. Я хотел бы знать, что я должен сделать, чтобы использовать значение, которое я получил из Почты?
Вот мой контроллер
/**
* @Route("/passforgotten", name="app_forgotten_password", methods="GET|POST")
*/
public function askResetPass(Request $request, UserPasswordEncoderInterface $encoder,ManagerRegistry $managerRegistry,
\Swift_Mailer $mailer, TokenGeneratorInterface $tokenGenerator): Response
{
$defaultData = ['message' => 'Type your message here'];
$form = $this->createFormBuilder($defaultData)
->add('email', EmailType::class)
->add('send', SubmitType::class)
->getForm();
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
$data = $form->getData();
$email=$data['email'];
//alternative that works of course with a real email
//$email="firstname.name@domain.ext";
dump($email);
$user=$this->getDoctrine()->getRepository(User::class)->findOneBy(["email" => $email]);
dump($email);
dump($user);
if ($user === null) {
$this->addFlash('danger', 'Email Inconnu, recommence !');
return $this->redirectToRoute('app_register');
}
$token = $tokenGenerator->generateToken();
$manager=$managerRegistry->getManager();
try{
$user->setResetPasswordToken($token);
$manager->flush();
} catch (\Exception $e) {
$this->addFlash('warning', $e->getMessage());
return $this->redirectToRoute('home');
}
//this has not been tested yet
$url = $this->generateUrl('security/ask_reset_password', array('token' => $token), UrlGeneratorInterface::ABSOLUTE_URL);
$message = (new \Swift_Message('Rénitialisation du mot de pass'))
->setFrom(array('symfony@domain.ext'))
->setTo($user->getEmail())
->setBody('hello ask for reset pass!'
);
$mailer->send($message);
$this->addFlash('notice', 'Mail correctement envoyé !');
//this is not finished
return $this->redirectToRoute('a_route');
}
return $this->render('security/ask_reset_password.html.twig',[
'form' => $form->createView()
]);
}