Laravel 5.5 Try / Catch无效,它执行异常句柄

时间:2018-03-29 20:05:05

标签: laravel laravel-5 try-catch laravel-5.5

我正在使用laravel 5.5我已经编写了一个带有try和catch异常的代码。但是Try / catch不管理异常处理。在Exception/handle.php

上执行异常

以下是我关注的代码

try {
 App\Models\justDoIt::find(1);
}  catch (\Exception $ex) {
       dd($ex);
       report($ex);
       return false;
}

我想知道为什么不执行catch并且handle.php中的report()显示错误

这是handle.php代码

public function report(Exception $exception) {
        echo "Handle";
        dd($exception);
        parent::report($exception);
    }

结果

Handle
FatalThrowableError {#284 ▼
  #message: "Class 'App\Http\Controllers\App\Models\justDoIt' not found"
  #code: 0
  #file: "D:\xampp7\htdocs\homeexpert_nik\app\Http\Controllers\HomeController.php"
  #line: 21
  #severity: E_ERROR
  trace: {▶}
}

结果将显示在handle.php文件中。

1 个答案:

答案 0 :(得分:0)

您的代码抛出错误,而不是例外。你试图使用一个不存在的类,PHP通过抛出FatalThrowableError来抱怨它。

在PHP 5中,此代码会导致在浏览器中呈现致命错误消息,但在PHP 7中(Laravel 5.5需要),PHP现在会抛出错误,就像它们是异常一样。这允许应用程序捕获这些错误,就像使用try / catch块的异常一样。

错误是逃避try / catch块的原因是错误不是Exception或其子代。抛出的对象是ErrorExceptionError类都实现了一个公共接口Throwable

Throwable
- Exception
- Error

Laravel的异常处理程序用于捕获这两个类,以显示您看到的错误页面。

如果您要将代码更改为以下内容,您会发现应该执行} catch (Throwable $e) {块:

try {
    App\Models\justDoIt::find(1);
} catch (\Exception $ex) {
   dd('Exception block', $ex);
} catch (\Throwable $ex) {
   dd('Throwable block, $ex);
}

有关详细信息,请参阅here

额外的补充:如果您想知道代码的问题是什么,那是因为您可能忘记了控制器中的use模型类:

use App\Models\justDoIt;