我有一些代码可以进行db调用和网络请求,我把它包装在try / catch中。问题是我永远无法捕捉到例外情况,并且它们似乎不是致命的例外:
try {
// make db requests and network calls
} catch (Exception $e) {
// handle exception
}
即,我遇到如下例外:
[Illuminate\Database\QueryException]
[PDOException]
[InvalidArgumentException]
有没有办法捕获这些异常?我是否需要明确每种可能的异常对象类型(意味着我必须创建许多try / catches),或者是否有推荐的方法来捕获非致命异常?
答案 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 对象被抛出。