如何正确捕获PHP异常(Laravel 5.1)

时间:2015-07-20 02:56:50

标签: php laravel exception laravel-5 eloquent

我有一些代码可以进行db调用和网络请求,我把它包装在try / catch中。问题是我永远无法捕捉到例外情况,并且它们似乎不是致命的例外:

try {
   // make db requests and network calls
} catch (Exception $e) {
   // handle exception
}

即,我遇到如下例外:

[Illuminate\Database\QueryException] 
[PDOException]
[InvalidArgumentException] 

有没有办法捕获这些异常?我是否需要明确每种可能的异常对象类型(意味着我必须创建许多try / catches),或者是否有推荐的方法来捕获非致命异常?

1 个答案:

答案 0 :(得分:17)

确保您正确使用命名空间,方法是在控制器顶部包含Exception类,如下所示:

 Use Exception; 

如果使用不提供名称空间的类,PHP将在当前名称空间中查找该类。 异常类存在于全局命名空间中,因此如果您这样做,请尝试/捕获某些命名空间代码,例如:您的控制器或模型,您需要做:

try {
  //code causing exception to be thrown
} catch(Exception $e) {
  //exception handling
}

如果你这样做,就没有办法错过任何例外。

否则,如果您在 App \ Http \ Controllers 中存储的控制器代码中出现异常,则您的catch将等待 App \ Http \ Controllers \ Exception 对象被抛出。