如何使Laravel返回JSONRESTAPI的自定义错误?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (117)

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

问题是:我想让他用键“code”和“message”抛出一个json形成的数组,每个数组都包含上述数据。

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

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

提问于
用户回答回答于

去你的app/start/global.php

这将转换所有的错误的401404一个自定义的JSON错误,而不是哎呦堆栈跟踪。添加这个:

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);
}
用户回答回答于

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

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

扫码关注云+社区