Laravel 验证规则“相同”引发错误,而不是将验证错误添加到消息包

问题描述 投票:0回答:2

我的 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)  
php laravel validation laravel-validation laravel-10
2个回答
0
投票

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”字段的验证错误消息包中。这样,您可以防止“相同”规则引发错误并在验证逻辑中处理它。


0
投票

您可以尝试使用

confirmed
验证规则。

您必须在验证中更改以下行。

'password_confirm' => 'required|min:8|same:password',

'password_confirmation' => 'required|min:8|confirmed:password',

请记住也要更改

input
中的
form
字段名称。

这里是文档

的链接
© www.soinside.com 2019 - 2024. All rights reserved.