【问题标题】:Catch Doctrine exception on Controller在控制器上捕获 Doctrine 异常
【发布时间】: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);

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

【问题讨论】:

    标签: orm doctrine symfony4


    【解决方案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
    猜你喜欢
    • 1970-01-01
    • 2013-08-12
    • 2020-07-29
    • 1970-01-01
    • 2018-02-07
    • 2011-04-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多