如何在symfony2框架中处理控制器内的异常

时间:2013-07-04 13:17:35

标签: symfony error-handling doctrine-orm

我试图在实体持久性期间捕获Symfony2.3应用程序中Controller内部的异常。

 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。 感谢。

2 个答案:

答案 0 :(得分:3)

Integrity constraint violation: 1062 Duplicate entry

在您的情况下,您应该检查之前的唯一性使用UniqueEntity validator来保存您的实体。

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

答案 1 :(得分:3)

可能你从第$em->flush()行得到了异常,它没有用try-catch语句包装。