我的 laravel 10.x 控制器的一部分如下:
$validator = Validator::make($request->all(), [
'email' => 'required|email|unique:users,email',
'password' => 'required|min:8',
'password_confirm' => 'required|min:8|same:password',
'avatar' => 'nullable|image|mimes:jpeg,png,jpg,gif,svg|max:2048',
'f_name' => 'required|string|min:3|max:50',
'l_name' => 'required|string|min:3|max:50',
'designation' => 'nullable|string|max:50',
'permissions' => 'required|array'
], $messages = [
'password_confirm.same' => 'password must match with password confirm',
]);
if ($validator->fails()) {
return response()->json([
'message' => 'Validation failed',
'validation_errors' => $validator->getMessageBag(),
], 422);
}
我希望它会在
'validation_errors' => $validator->getMessageBag(),
中返回验证错误消息。
但它不是将验证错误添加到验证错误消息包中,而是在 laravel.log 文件中引发错误:
[2023-09-05 06:31:00] local.ERROR: The password confirm field must match password. (and 3 more errors)
Laravel 的验证规则“same”默认在失败时抛出错误,而不是在消息包中添加错误消息。如果您想防止引发此错误,而是将自定义错误消息添加到消息包中,则可以通过手动将错误添加到消息包中来使用解决方法。您可以这样做:
$validator = Validator::make($request->all(), [
'email' => 'required|email|unique:users,email',
'password' => 'required|min:8',
'password_confirm' => 'required|min:8',
'avatar' => 'nullable|image|mimes:jpeg,png,jpg,gif,svg|max:2048',
'f_name' => 'required|string|min:3|max:50',
'l_name' => 'required|string|min:3|max:50',
'designation' => 'nullable|string|max:50',
'permissions' => 'required|array'
]);
// Add a custom error message for the "password_confirm" field if it fails the "same" rule
if ($request->input('password') !== $request->input('password_confirm')) {
$validator->errors()->add('password_confirm', 'The password confirmation does not match.');
}
if ($validator->fails()) {
return response()->json([
'message' => 'Validation failed',
'validation_errors' => $validator->getMessageBag(),
], 422);
}
在此代码中,我们通过比较“password”和“password_confirm”字段来手动执行“相同”规则检查。如果它们不匹配,我们将自定义错误消息添加到“password_confirm”字段的验证错误消息包中。这样,您可以防止“相同”规则引发错误并在验证逻辑中处理它。
您可以尝试使用
confirmed
验证规则。
您必须在验证中更改以下行。
'password_confirm' => 'required|min:8|same:password',
'password_confirmation' => 'required|min:8|confirmed:password',
请记住也要更改
input
中的 form
字段名称。
这里是文档
的链接