【问题标题】:How to manually catch error exception in Laravel如何在 Laravel 中手动捕获错误异常
【发布时间】:2018-10-22 14:13:38
【问题描述】:

在我的项目中,我需要在数据库中进行批量导入和数据插入。

所以,我需要知道 API 请求何时失败。这里的问题是 PHP 无法捕获该异常,因为 Laravel 5.6 会在出现任何类型的错误时停止执行。

我需要阻止 laravel 自动停止执行,并让 php 决定如果 API 请求失败然后让我们等待 5 秒再试一次。

为了实现这一点,我在 laravel 控制器中创建了一个函数。

private function fetchAPI($id) {
    try {
        $rawResult = file_get_contents('http://example.com/'.$id.'?key=5453');
    } catch (Exception $e) {
        sleep(5);
        $this->fetchAPI($id);
    }
    return json_decode($rawResult, true);
}

上述方法将利用 try...catch 块。但我也实施了布尔检查,但没有运气:

private function fetchAPI($id) {
    $rawResult = file_get_contents('http://example.com/'.$id.'?key=5453');
    if($rawResult === FALSE) {
        sleep(5);
        $this->fetchAPI($id);
    } else {
        return json_decode($rawResult, true);
    }
}

在这种情况下,如果 Laravel 控制器方法的 API 请求失败,我该如何重试?

【问题讨论】:

  • 首先使用\Exception而不是Exception,因为Exception被认为是YourCurrentFileNamesapce\Exception
  • 其次,在其他类型中会抛出一些异常(对于致命错误等),您可以在第一个之后添加第二个catchcatch(\Throwable $e) { ... }
  • @PierreEmmanuelLallemant 似乎有效!
  • @PierreEmmanuelLallemant 将其发布为答案,我会将其标记为有效!

标签: php laravel api


【解决方案1】:

使用\Exception 而不是Exception,因为Exception 被认为是YourCurrentFileNamespace\Exception

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-09-13
    • 2012-02-01
    • 2019-09-08
    • 2015-09-21
    • 2020-07-30
    • 2017-02-23
    • 2015-06-24
    • 2023-03-16
    相关资源
    最近更新 更多