在控制器上捕获 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 模态视图控制器