在我的Laravel 5.6应用程序中,使用throw $e
似乎将异常直接输出到屏幕并绕过Handler.php异常处理程序。这意味着在开发中该异常不会由高声显示,而在生产中不会报告该异常。
在撰写本文时,我意识到我可能使用了不正确的try / catch,但也许有人可以确认这一点?
我当前的代码:
try{
$stockLocation = StockLocation::findOrFail($request->location_id);
} catch (\Exception $e){
if($e instanceof ModelNotFoundException){
throw new UserNotifyException('This stock location could not be found on the system', 404);
}
throw $e;
}
我在这里的意图是重新抛出不是“未找到模型”的任何异常,我希望可以用完全没有try catch的相同方式来处理它?</ p>
我现在意识到我应该将以上内容写为:
try{
$stockLocation = StockLocation::findOrFail($request->location_id);
} catch (ModelNotFoundException $e){
throw new UserNotifyException('This stock location could not be found on the system', 404);
}
除此之外,还有更好的方法来处理我不记录的异常吗?当前,我将异常转换为自己的自定义异常类(UserNotifyException),然后在Handler.php中确保未报告此异常。