【发布时间】:2020-09-12 00:35:26
【问题描述】:
我有一个带有 @UniqueEntity 注释的 Symfony 实体。我使用它,所以我不会在我的数据库中使用相同的email 获得双重记录,但我不想向用户返回电子邮件已经在数据库中(隐私原因)。
如何使用@UniqueEntity 但捕获错误并向用户返回成功消息?
控制器代码:
public function register(Request $request, EntityManagerInterface $entityManager, TranslatorInterface $translator): Response
{
$success = false;
$newsletter = new Newsletter();
$form = $this->createForm(NewsletterType::class, $newsletter);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
$newsletter = $form->getData();
$entityManager->persist($newsletter);
$entityManager->flush();
$this->addFlash('success', $translator->trans('newsletter.signed_up'));
return $this->redirectToRoute('landing');
}
return $this->render('landing/landing.html.twig', [
'newsletter_form' => $form->createView(),
'newsletter_success' => $success,
]);
}
【问题讨论】:
-
你能显示代码吗,例如从您想要捕获错误的控制器?
-
@dbrumann 补充说,它是一个简单的控制器,只有一种形式,没有什么复杂的
-
所有网站都告诉你用户名或邮箱已经被占用,那么用户怎么知道邮箱已经存在呢?
-
@hous 但是,例如,当您在重置密码时输入电子邮件时,出于安全/隐私原因,它不会说明具有该电子邮件地址的帐户是否在数据库中。这就是我想在这里实现的目标。我不希望电子邮件地址所有者以外的其他人知道帐户是否存在/是否订阅了时事通讯。
-
对于重置密码,是的,我们不会说电子邮件是否存在,但您可以说“如果电子邮件存在,您将收到一封电子邮件......”。
标签: symfony symfony-forms symfony-validator