2

我试图在实体持久性期间捕获 Symfony2.3 应用程序中控制器中的操作内的异常。

 try {
            $em->persist($firm);
     } catch(\Exception $e){
             .........
     }

我希望所有错误都将由我在catch语句中的代码处理,但我得到了以下错误:

[2/2] DBALException: An exception occurred while executing 'INSERT INTO ...
...
[1/2] PDOException: SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry
...
CRITICAL - Uncaught PHP Exception Doctrine\DBAL\DBALException

如果我在try语句中抛出异常,它会被catch中的代码正确处理和处理

try {
           throw new \Doctrine\ORM\ORMException;
           //or throw new \Doctrine\DBAL\DBALException;
           //or throw new \PDOException;
    } catch(\Exception $e){
      .......        
    }

我的问题是:应该如何在 Symfony2 控制器中正确处理 Doctrine2。 谢谢。

4

2 回答 2

3
Integrity constraint violation: 1062 Duplicate entry

在您的情况下,您应该在使用UniqueEntity 验证器持久化您的实体之前检查唯一性。

如果表单未验证 - 只是不要坚持以避免此异常。

于 2013-07-04T13:19:53.807 回答
3

可能您从$em->flush()没有用 try-catch 语句包装的行中得到异常。

于 2013-07-04T13:37:51.137 回答