我正在使用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文件中。
答案 0 :(得分:0)
您的代码抛出错误,而不是例外。你试图使用一个不存在的类,PHP通过抛出FatalThrowableError
来抱怨它。
在PHP 5中,此代码会导致在浏览器中呈现致命错误消息,但在PHP 7中(Laravel 5.5需要),PHP现在会抛出错误,就像它们是异常一样。这允许应用程序捕获这些错误,就像使用try / catch块的异常一样。
错误是逃避try / catch块的原因是错误不是Exception
或其子代。抛出的对象是Error
。 Exception
和Error
类都实现了一个公共接口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;