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

Joe*_*nks 7 php exception laravel eloquent laravel-5

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

try {
   // make db requests and network calls
} catch (Exception $e) {
   // handle exception
}
Run Code Online (Sandbox Code Playgroud)

也就是说,我遇到了以下例外情况:

[Illuminate\Database\QueryException] 
[PDOException]
[InvalidArgumentException] 
Run Code Online (Sandbox Code Playgroud)

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

jed*_*ylo 18

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

 Use Exception; 
Run Code Online (Sandbox Code Playgroud)

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

try {
  //code causing exception to be thrown
} catch(Exception $e) {
  //exception handling
}
Run Code Online (Sandbox Code Playgroud)

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

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