我一直在搜索关于此的一些额外信息,指南和建议,但到目前为止它一直非常有限。我正在创建一个带有护照的Laravel 5.6 API,需要实现一些强大的异常处理。
到目前为止,我已经将异常处理程序类编辑为以下几行:
if ($request->wantsJson()) {
//model not found
if ($exception instanceof ModelNotFoundException) {
return response()->json(
[
'errors' => [
'status' => 404,
'title' => 'Resource not found',
'detail' => $exception->getMessage()
]
],
404);
}
}
这会按预期将JSON错误发送给用户。我还包括未找到模型的捕获,未找到页面,缺少API范围,最后是其他任何内容的后备。
对于我知道最终用户可能存在输入错误的代码区域,我已经实现了try catch,我可以将错误消息转换为更友好的用户,重新抛出然后将其发送回具有上述代码的用户。
try{
$to = new Carbon(request('created_to'));
} catch (\Exception $e){
throw new \Exception('Date time could not be parsed into recognised format.', 400, $e);
}
我还没有实现任何请求/表单验证异常,但希望使用Laravels消息包功能类似。
我有一些可以在这里使用的东西,但是很想知道你的想法,如果有人有任何建议,可以链接到指南或其他提示,他们可以分享以使其更好。当然,如果一切都错了我很乐意重新开始! 我觉得必须有一些发展良好的库或者我缺少的框架原生的东西。
修改
我找到的一些资源:
Middleware to ensure always json response - 如果标头中未包含Accept: application/json
,则用户将获得html。此中间件将此标头添加到所有HTML请求中。
Dingo API - 这个包似乎曾经是Laravel API所有东西的转向。然而,似乎更新版本的大部分内容都是多余的。可能仍然有可用的元素,但似乎有很多与使用5.5 +相关的问题/错误。
Blog post focusing on heimdal error handler - 这是我在专用API异常处理程序包中找到的最接近的。它又很老了,暂时没有更新。