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