Laravel 5.5+ API异常处理(JSON) - 最好的方法是什么?

时间:2018-06-16 19:49:51

标签: php laravel api exception laravel-passport

我一直在搜索关于此的一些额外信息,指南和建议,但到目前为止它一直非常有限。我正在创建一个带有护照的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异常处理程序包中找到的最接近的。它又很老了,暂时没有更新。

0 个答案:

没有答案