我正试图找到一种方法来定制Laravel 5.4的错误处理时找不到路由 . 在我的web.php中有一个错误定义的路由(故意用于测试目的) . 我把它包装在try ... catch块中并抛出我自己的自定义异常RoutesException:
try {
Route::get('terms_rop_labels/view', 'LRChildController@view');
}catch (NotFoundHttpException $ex) {
throw new RoutesException('terms_rop_labels/view');
}
然后在app \ Exceptions \ Handler.php中我试图在测试视图中捕获异常:
if ($exception instanceof NotFoundHttpException) {
$parameters = [
'message'=> 'NotFoundHttpException'
];
return response()->view('errors.test', $parameters, 500);
}
if ($exception instanceof RoutesException) {
$parameters = [
'message'=> 'RoutesException'
];
return response()->view('errors.test', $parameters, 500);
}
任何人都可以解释为什么处理程序捕获NotFoundHttpException而不是我的自定义RoutesException?
1 回答
web.php中的路由不会引发NotFoundHttpException异常 . 您只是在web.php中注册路由,而不是解决它们 .
web.php中的Route facade允许您静态访问Illuminate \ Routing \ Router类中的get方法(参见https://github.com/laravel/framework/blob/5.4/src/Illuminate/Routing/Router.php中的125 - 135行)
(所以你只是在web.php文件中使用Router get方法向RouteCollection添加路由 . )
如果查看后向跟踪,可以看到在您的情况下抛出NotFoundHttpException异常的位置 . 例如,如果要通过在web.php中注册而导航到尚未添加到路径集合的不存在路由,则会看到第179行上的RouteCollection类匹配方法抛出了NotFoundHttpException .
在你的情况下,try / catch中没有捕获NotFoundHttpException,因为
没有抛出NotFoundHttpException .
也许你可以通过在app \ Exceptions \ Handler中捕获NotFoundHttpException来实现你想要的 .