Symfony 如何在findOneBy方法中使用请求post数据

Symfony 如何在findOneBy方法中使用请求post数据,symfony,Symfony,我正在写一个方法来请求在symfony中重置密码 我从发布的值中获取用户的电子邮件 $data = $form->getData(); $email = $data['email']; 看来我得到了很好的电子邮件价值,我可以通过电子邮件验证它 dump($email); 返回 “名字。name@domain.ext“ 然后,我尝试使用 $user = $this->getDoctrine()->getRepository(User::class)->findOne

我正在写一个方法来请求在symfony中重置密码 我从发布的值中获取用户的电子邮件

$data  = $form->getData();
$email = $data['email'];
看来我得到了很好的电子邮件价值,我可以通过电子邮件验证它

 dump($email);
返回 “名字。name@domain.ext“

然后,我尝试使用

$user = $this->getDoctrine()->getRepository(User::class)->findOneBy(["email" => $email]);
但是结果为空。

之后,我尝试了两种不同的方法,两种方法都非常有效,即给一个有效的用户

1-我更换

$email = $data['email']; 

二,- 我使用以下命令更改获取用户的行:

 $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()
    ]);
}

很抱歉,我传递了一封拼写错误的电子邮件,一封在a b丢失之前的字母l,我每次都用它的形式记忆。事实上,它在任何情况下都能工作。

您能否发布控制器操作中失败代码的代码片段,以便我们能够帮助确定
$email
似乎为空/无效的原因?谢谢您的关注。我添加了完整的控制器。请注意,我只是第一次尝试,而且我无法从数据库中获取用户。不管是什么,问题显然来自我将值传递给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()
    ]);
}