我有一些进行数据库调用和网络请求的代码,我将其封装在 try/catch 中。问题是我永远无法捕获异常,而且它们似乎不是致命异常:
try {
// make db requests and network calls
} catch (Exception $e) {
// handle exception
}
也就是说,我遇到了这样的异常:
[Illuminate\Database\QueryException]
[PDOException]
[InvalidArgumentException]
有没有办法捕获这些异常?我是否需要明确指出每种可能的异常对象类型(意味着我必须创建许多 try/catch),或者是否有推荐的捕获非致命异常的方法?
最佳答案
通过在 Controller 顶部包含 Exception 类,确保您正确使用命名空间,如下所示:
Use Exception;
如果您使用一个类而没有提供它的命名空间,PHP 会在当前命名空间中查找该类。 Exception 类存在于全局命名空间中,因此如果您在某些命名空间代码中执行该 try/catch,例如您的 Controller 或模型,您需要执行以下操作:
try {
//code causing exception to be thrown
} catch(Exception $e) {
//exception handling
}
如果你这样做,就不会错过任何异常。
否则,如果您在存储在 App\Http\Controllers 中的 Controller 代码中遇到异常,您的捕获将等待 App\Http\Controllers\Exception 对象被抛出。
关于php - 如何正确捕获 PHP 异常 (Laravel 5.1),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31508223/