技术日志 - API 中使用 Laravel form 表单验证抛出异常如何返回 API 格式数据

laraevl 提供的 表单验证确实好用,配置简单,节省时间。但是对接口的支持不是很好,通常,我们在进行接口请求,验证失败的时候,需要返回固定格式的 json 错误信息,这时候要怎么处理呢?

首先,我们要知道 Laravel 异常的全局捕获是在:app/Exceptions/Handler.php 文件,知道这点的话就很简单了,既然所有异常的抛出都会经过这个 Handler,那我们在这里处理下就可以了。下面上代码:

在 app/Exceptions/Handler.php render方法中添加以下代码:
这里感谢老哥 di-gua 指出的更好的写法;

        ## 验证错误
        if($request->is("api/*")){// 我们仅仅处理 api的异常,所以这里要排除下其他前缀路由
            if($exception instanceof ValidationException){//如果抛出的异常是 ValidationException 的实例,我们就可以确定该异常是表单验证异常
            ## 下面是你需要包装的数据
                $result = [
                    "code"=>1,
                    "msg"  =>  $exception->validator->errors()->first() # 更好的获取错误的方法
                    ##"msg"=>array_values($exception->errors())[0][0],//这里 ValidationException 异常的格式通常是数组的形式,如果不确定如何取值可以打印下看下结构
                    "data"=>[]
                ];
                return response()->json($result);
            }
        }
本作品采用《CC 协议》,转载必须注明作者和本文链接
talk is cheap,show me the code!
Marrigan
《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
讨论数量: 1

获取错误信息那里这么写更优雅一些

"msg" => $exception->validator->errors()->first()
3年前 评论

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