laravel api统一返回错误格式怎么做

以下的是表单验证的返回格式,很棒也很舒服

{
    "message": "The given data was invalid.",
    "errors": {
        "captcha_code": [
            "请填写图片验证码"
        ]
    }
}

但是有些验证在表单验证做不了,如abort(403, ‘图片验证码已失效’,[]);

{
    "message": "图片验证码已失效"
}

如何统一为表单验证的返回格式?先行谢过大佬。

《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
最佳答案

Plan A:用自定义异常吧,别用 abort() 了。

Plan B:在app/Exceptions/Handler.php中,重写render()方法

<?php

namespace App\Exceptions;

class Handler extends ExceptionHandler
{
    public function render($request, \Throwable $e)
    {
        return response([
            'message' => $e->getMessage(),
            'errors' => $e->getMessage(),
        ]);
    }
}
3年前 评论
ShamGod 2年前
LiamHao (作者) 2年前
讨论数量: 4

Plan A:用自定义异常吧,别用 abort() 了。

Plan B:在app/Exceptions/Handler.php中,重写render()方法

<?php

namespace App\Exceptions;

class Handler extends ExceptionHandler
{
    public function render($request, \Throwable $e)
    {
        return response([
            'message' => $e->getMessage(),
            'errors' => $e->getMessage(),
        ]);
    }
}
3年前 评论
ShamGod 2年前
LiamHao (作者) 2年前
陈先生

博客:一种 Laravel 异常上下文解决方案 看这个里面有我的回复,抄作业就行了,具体逻辑自己安排

3年前 评论

将表单的第一个错误放到 message 里

// app/Exceptions/Handler.php
...
protected function invalidJson($request, ValidationException $exception)
    {
        $errors = $exception->errors();
        $firstError = \reset($errors);

        return response()->json([
            'message' => $firstError[0] ?? '参数错误',
            'errors' => $errors,
        ], $exception->status);
    }
...
2年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!