【问题标题】:How to properly catch PHP exceptions (Laravel 5.1)如何正确捕获 PHP 异常(Laravel 5.1)
【发布时间】:2015-10-09 02:05:45
【问题描述】:

我有一些代码可以进行数据库调用和网络请求,并且我将它包装在 try/catch 中。问题是我永远无法捕获异常,而且它们似乎不是致命异常:

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

也就是说,我遇到了这样的异常:

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

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

【问题讨论】:

  • 你把 try/catch 子句放在哪里了?
  • 这是 Laravel 4.2 还是 5+?
  • 5.1.愚蠢的我,我没有在 Exception 类之前使用反斜杠。让我试试……

标签: php laravel exception laravel-5 eloquent


【解决方案1】:

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

 Use Exception; 

如果您使用一个类而不提供其命名空间,PHP 会在当前命名空间中查找该类。 Exception 类存在于全局命名空间中,因此如果您在某些命名空间代码中执行该尝试/捕获,例如您的控制器或模型,您需要执行以下操作:

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

如果你这样做,就不会错过任何例外。

否则,如果您在存储在 App\Http\Controllers 中的控制器代码中遇到异常,您的捕获将等待 App\Http\Controllers\Exception 对象被扔掉。

【讨论】:

  • 啊。对我来说,这似乎是一个粗心的错误。我会试试这个,如果它有效,我会选择这个答案。
  • 我故意尝试 Apps\MyModel 来查找记录,它抛出类“Apps\MyModel”未找到异常。我尝试了 FatalErrorException 和 \Exception,都失败了。有什么想法吗?
猜你喜欢
  • 1970-01-01
  • 2016-08-20
  • 1970-01-01
  • 1970-01-01
  • 2023-03-08
  • 1970-01-01
  • 2015-09-21
  • 2018-07-28
  • 1970-01-01
相关资源
最近更新 更多