laravel 的 validate 为啥结果老是会变来变去的?

我代码是这样的:

$message = [
            'name.required' => '名称必填',
            'age.required' => '年龄必填',
            'add_time.required'=>'添加时间必填',
        ];
        $this->request->validate([
            'name' => 'required',
            'age' => 'required',
            'add_time' => 'required',
        ], $message);

然后它一会提示

"code": 14,

"msg": "接口参数传递错误",

"data": "名称必填"

一会又提示

"code": 14,

"msg": "接口参数传递错误",

"data": "添加时间必填"

一会提示

"code": 14,

"msg": "接口参数传递错误",

"data": "年龄必填"

感觉在乱跳,能不能就从上到下依次提示,第一条不符合提示第一条,第二条不符合提示第二条这样的?

我希望规则能一条一条执行,现在感觉就是乱的很,我刷新下就换成别的提示了,刷新下又换了

《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
讨论数量: 16

本来就是按顺序来的

1年前 评论
donggan (楼主) 1年前
donggan (楼主) 1年前
巴啦啦臭魔仙 (作者) 1年前
LnSonG 1年前
donggan (楼主) 1年前

我用的验证器类,并没有出现这种情况

1年前 评论
donggan (楼主) 1年前

猜测是你提交的数据data的顺序不是固定的,所以返回的信息也是不固定的。要不你做下数据的排序后再验证

1年前 评论
donggan (楼主) 1年前
deatil (作者) 1年前

如果你希望在某个属性第一次验证失败后停止运行验证规则,你需要附加 bail 规则到该属性:

$request->validate([
    'title' => 'bail|required|unique:posts|max:255',
    'body' => 'required',
]);
1年前 评论
donggan (楼主) 1年前
donggan (楼主) 1年前

试着把request的值打出来看看,验证下是不是都是空呢。从贴出来的代码看,不应该不出现提示乱蹦的情况才对。

1年前 评论

你可以在异常捕获的时候只捕获第一个异常

if($exception instanceof ValidationException) {
    $message = $exception->validator->errors()->first();
    return response()->json([
        'message' => $message,
        'code' => Response::HTTP_BAD_REQUEST,
        'data' => [],
    ]);
}

也可以在请求异常类中单独设置其他返回异常 在handler 中 捕获你设置的异常 如:

protected function failedValidation(Validator $validator)
{
    throw new ApiException($validator->errors()->first());
}

这两种方式都只会返回一个异常信息。而不是表单提交后所有的验证不通过的信息全部返回给前端

1年前 评论

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