0

我有一个带有@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,
        ]);
    }
4

1 回答 1

0

基本上有两种可能:

  1. 检查插入的电子邮件是否已经在执行显式查询的数据库中(保留@UniqueConstraint注释以保持数据完整性)。
  2. 将实体管理器操作包装在try-catch块中,如下所示(另请查看此答案

    try {
      $entityManager->persist($newsletter);
      $entityManager->flush();
    } catch (UniqueConstraintViolationException $e) {
      // you can check if the exception is raised by email field, somehow, or just "mask" with a general error
    }
    
于 2020-05-26T08:22:22.487 回答