laravel 中 api接口 使用 FormRequest 验证时,返回json格式的 validate错误信息

laravel 中使用 FormRequest类来做数据验证时,默认是把validator的错误信息写入session中返回到前端页面的 $errors中,

前端页面 显示如下

    @if(count($errors->all())>0)
        <div class="well">
            <ul class="list-group">
                @foreach($errors->all() as $err)
                <li class="list-group-item">{{$err}}</li>
                @endforeach
            </ul>
        </div>
    @endif

然而,这是前端的页面(PC页面),我们现在要说的 API接口

解决办法,同样是关注 App\Exceptions\Handler.php   这个文件是laravel的错误处理的地方

同样是要修改类中的 render() 方法

思路是  当validator验证出错的时候 laravel 抛出的是一个 validateException 类,并且laravel接口路由的前缀是 “api/”,那么我们可能从 request中匹配 路由是 “api/*” 的路由,如果是,并且 $exception 是 validateException的一个实例,则返回出自己定义的json数据

原始render()方法如下

public function render($request, Exception $exception)
    {
        return parent::render($request, $exception);
    }

修改后的方法如下

public function render($request, Exception $exception)
    {
        //如果路由中含有“api/”,则说明是一个 api 的接口请求
        if($request->is("api/*")){
            //如果错误是 ValidationException的一个实例,说明是一个验证的错误
            if($exception instanceof ValidationException){
                $result = [
                    "code"=>422,
                    //这里使用 $exception->errors() 得到验证的所有错误信息,是一个关联二维数组,所以                使用了array_values()取得了数组中的值,而值也是一个数组,所以用的两个 [0][0]
                    "msg"=>array_values($exception->errors())[0][0],
                    "data"=>""
                ];
                return response()->json($result);
            }
        }

        return parent::render($request, $exception);
    }

此时当验证器 FromRequest验证错误的时候,就会返回json的错误信息了;

 

 

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

A黄俊辉A

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值