Orm 捕获控制器上的异常

Orm 捕获控制器上的异常,orm,doctrine,symfony4,Orm,Doctrine,Symfony4,我正在使用Symfony 4和条令,并且正在处理一个将被持久化的实体 我想知道如何在持久化过程中发生异常时进行一种try\catch处理,以便相应地发送不同的错误 到目前为止,我的代码如下所示 $user->setUsername($username) ->setEmail($email) ->setPassword($password); $em->persist($user); $em->flush(); return $th

我正在使用Symfony 4和条令,并且正在处理一个将被持久化的实体

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

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

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

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

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

我希望能够在出现错误的情况下决定在响应中发送什么。

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

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();
}

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

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是由条令引发的任何异常吗?您需要检查异常以自定义错误消息,我刚才谈到了这一点。条令返回带有DBALException的异常,如果不在此处返回异常,则需要使用常规异常。条令\DBAL\DBALException和条令\DBAL\Driver\DriverException已分别重命名为条令\DBAL\exception和条令\DBAL\Driver\exception。你所说的检查条件是什么意思?另外,DBALException是由条令引发的任何异常吗?您需要检查异常以自定义错误消息,我刚才谈到了这一点。条令返回带有DBALException的异常,如果不在此处返回异常,则需要使用常规异常。条令\DBAL\DBALException和条令\DBAL\Driver\DriverException已分别重命名为条令\DBAL\exception和条令\DBAL\Driver\exception。