第一篇 - dingo/api - 5.错误

1. 系统异常

说明:

  1. dingo/api 会自动catch exception,然后转化为对应的json

Symfony异常列表

ExceptionStatus Code
Symfony\Component\HttpKernel\Exception\AccessDeniedHttpException403
Symfony\Component\HttpKernel\Exception\BadRequestHttpException400
Symfony\Component\HttpKernel\Exception\ConflictHttpException409
Symfony\Component\HttpKernel\Exception\GoneHttpException410
Symfony\Component\HttpKernel\Exception\HttpException500
Symfony\Component\HttpKernel\Exception\LengthRequiredHttpException411
Symfony\Component\HttpKernel\Exception\MethodNotAllowedHttpException405
Symfony\Component\HttpKernel\Exception\NotAcceptableHttpException406
Symfony\Component\HttpKernel\Exception\NotFoundHttpException404
Symfony\Component\HttpKernel\Exception\PreconditionFailedHttpException412
Symfony\Component\HttpKernel\Exception\PreconditionRequiredHttpException428
Symfony\Component\HttpKernel\Exception\ServiceUnavailableHttpException503
Symfony\Component\HttpKernel\Exception\TooManyRequestsHttpException429
Symfony\Component\HttpKernel\Exception\UnauthorizedHttpException401
Symfony\Component\HttpKernel\Exception\UnsupportedMediaTypeHttpException415

使用例子

// 代码
$api->version('v1', function ($api) {
    $api->put('user/{id}', function ($id) {
        $user = User::find($id);

        if ($user->updated_at > app('request')->get('last_updated')) {
            throw new Symfony\Component\HttpKernel\Exception\ConflictHttpException('User was updated prior to your request.');
        }

        // No error, we can continue to update the user as per usual.
    });
});

// 异常响应信息
{
    "message": "User was updated prior to your request.",
    "status_code": 409
}

2. Resource Exceptions

dingo/api 提供的
Dingo\Api\Exception\DeleteResourceFailedException
Dingo\Api\Exception\ResourceException
Dingo\Api\Exception\StoreResourceFailedException
Dingo\Api\Exception\UpdateResourceFailedException

使用例子

// 代码
$api->version('v1', function ($api) {
    $api->post('users', function () {
        $rules = [
            'username' => ['required', 'alpha'],
            'password' => ['required', 'min:7']
        ];

        $payload = app('request')->only('username', 'password');

        $validator = app('validator')->make($payload, $rules);

        if ($validator->fails()) {
            throw new Dingo\Api\Exception\StoreResourceFailedException('Could not create new user.', $validator->errors());
        }

        // Create user as per usual.
    });
});


// 异常响应信息
{
    "message": "Could not create new user.",
    "status_code": 422,
    "errors": {
        "username": [
            "The username field is required."
        ],
        "password": [
            "The password field is required."
        ]
    }
}

3. 自定义异常

参考:https://github.com/dingo/api/wiki/Errors-And-Error-Responses#Custom Exception Responses

    原文作者:风云雄霸天下123456
    原文地址: https://www.jianshu.com/p/81cf9dc9236d
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞