在控制器上捕获 Doctrine 异常

Posted

技术标签:

【中文标题】在控制器上捕获 Doctrine 异常【英文标题】:Catch Doctrine exception on Controller 【发布时间】:2018-05-28 11:53:47 【问题描述】:

我正在使用带有 Doctrine 的 Symfony 4,并且正在处理一个将被持久化的实体。

我想知道在持久化过程中发生异常时如何进行 try\catch 处理,以便我可以相应地发送不同的错误。

到目前为止,我的代码如下所示

$user->setUsername($username)
    ->setEmail($email)
    ->setPassword($password);

    $em->persist($user);
    $em->flush();

return $this->json(['msg'=>'some message', 201);

如果出现错误,我希望能够决定在响应中发送什么。

【问题讨论】:

【参考方案1】:

您可以按如下方式简单地捕获错误,但您必须检查条件。

try 
    $user->setUsername($username)
    ->setEmail($email)
    ->setPassword($password);

    $em->persist($user);
    $em->flush();
 
catch(DBALException $e)
    $errorMessage = $e->getMessage();
    
catch(\Exception $e)
    $errorMessage = $e->getMessage();

【讨论】:

检查条件是什么意思?另外,DBALException 是 Doctrine 抛出的任何异常吗? 您需要检查异常以自定义错误消息,我正在谈论这个。教义返回DBALException异常,如果这里不返回异常,则需要使用一般异常。 Doctrine\DBAL\DBALException 和 Doctrine\DBAL\Driver\DriverException 已分别重命名为 Doctrine\DBAL\Exception 和 Doctrine\DBAL\Driver\Exception。 github.com/doctrine/dbal/releases

以上是关于在控制器上捕获 Doctrine 异常的主要内容,如果未能解决你的问题,请参考以下文章

** 由于未捕获的异常“NSInvalidArgumentException”而终止应用程序,原因:“应用程序试图在目标上呈现一个 nil 模态视图控制器

控制器可以捕获模型抛出的异常吗?

捕获异常作为预期的程序执行流控制?

Rails:在 Rails 控制器中捕获所有异常

ASP.NET MVC 控制器不会从 LINQ lambda 捕获异常

“由于未捕获的异常而终止应用程序”在推送视图控制器时崩溃