在Laravel中,如何使用JSON响应检测“422 Unprocessable Entity”?

时间:2017-05-26 15:23:33

标签: php json laravel

我现在正试图从服务器获取响应,如果服务器响应422 Unprocessable Entity,我可以修改我的功能,以便我们可以对用户有不同的响应。

现在有2个潜在错误,第一个是

1)用户资金不足或信用卡因任何原因被拒绝

{"errors": ["The credit card on file could not be charged."]}

2)用户已订阅产品

{"errors": ["Cannot reactivate a subscription that is not marked \"Canceled\", \"Unpaid\", \"Trial Ended\", or \"On Hold\"."]}

响应是通过JSON发送的,我想知道在Laravel中我能做些什么来检测这两个问题?感谢您的帮助,谢谢。

1 个答案:

答案 0 :(得分:-1)

我会使用Exceptions\Handler.php文件来正确处理这些异常。

public function render($request, Exception $e)
{
    // 404 Errors
    // Either the route does not exist or a model is not found when performing an Eloquent query
    if($e instanceof NotFoundHttpException || $e instanceof ModelNotFoundException) {
        return response()->json([
            'error' => 'Not found'
        ], 404);
    } elseif ($e instanceof HttpException) {
        return response()->json([
            'error' => 'Unsupported Media Type'
        ], 415);
    } elseif ($e instanceof AuthenticationException) {
        return response()->json([
            'error' => 'Forbidden. Unauthenticated.'
        ], 403);
    } elseif ($e instanceof QueryException) {
        return response()->json([
            'error' => 'Unresolvable Query.',
            'message' => $e->getMessage()

        ], 400);
    }

    return parent::render($request, $e);
}

如您所见,您可以捕获异常并返回正确的JSON响应。

为了更好地区分您是想要返回JSON还是正常'消息,如果您请求的是AJAX请求并且您想要返回JSON或某事,则可以使用if($request->ajax()) { ... } else { ... }进行检查。其他