Как использовать данные для запроса в методе findOneBy - PullRequest
0 голосов
/ 23 января 2020

Я пишу метод для запроса сброса пароля в 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()
    ]);

}

1 Ответ

0 голосов
/ 23 января 2020

Извините, но я передавал письмо с ошибкой, написанное мною перед самым отсутствием ab, и каждый раз использовал форму для запоминания формы. На самом деле это работает в каждом случае.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...