如何使Laravel返回JSON REST API的自定义错误

我正在开发某种RESTful API。当发生某些错误时,我会抛出错误。App::abort($code, $message)

问题是:我希望他抛出一个json格式的数组,其中包含键“代码”和“消息”,每个数组都包含上述数据。

Array
(
    [code] => 401
    [message] => "Invalid User"
)

有没有人知道这是否可能,如果是,我该怎么做?


答案 1

转到您的 .app/start/global.php

这会将和的所有错误转换为自定义 json 错误,而不是 Whoops 堆栈跟踪。添加以下内容:401404

App::error(function(Exception $exception, $code)
{
    Log::error($exception);

    $message = $exception->getMessage();

    // switch statements provided in case you need to add
    // additional logic for specific error code.
    switch ($code) {
        case 401:
            return Response::json(array(
                    'code'      =>  401,
                    'message'   =>  $message
                ), 401);
        case 404:
            $message            = (!$message ? $message = 'the requested resource was not found' : $message);
            return Response::json(array(
                    'code'      =>  404,
                    'message'   =>  $message
                ), 404);        
    }

});

这是处理此错误的众多选项之一。


制作 API 时,最好创建自己的帮助程序,这样可以扩展类。Responser::error(400, 'damn')Response

有点像:

public static function error($code = 400, $message = null)
{
    // check if $message is object and transforms it into an array
    if (is_object($message)) { $message = $message->toArray(); }

    switch ($code) {
        default:
            $code_message = 'error_occured';
            break;
    }

    $data = array(
            'code'      => $code,
            'message'   => $code_message,
            'data'      => $message
        );

    // return an error
    return Response::json($data, $code);
}

答案 2

您可以将数组传递给返回的 JSON 响应:

$returnData = array(
    'status' => 'error',
    'message' => 'An error occurred!'
);
return Response::json($returnData, 500);

推荐