技术日志 - 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
《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
讨论数量: 1

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

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

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