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

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

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

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

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

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

《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
最佳答案

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(),
        ]);
    }
}
4年前 评论
ShamGod 4年前
LiamHao (作者) 4年前
讨论数量: 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(),
        ]);
    }
}
4年前 评论
ShamGod 4年前
LiamHao (作者) 4年前

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

4年前 评论

将表单的第一个错误放到 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);
    }
...
4年前 评论