📜  如何在 laravel 中向验证器错误添加自定义错误 - PHP (1)

📅  最后修改于: 2023-12-03 15:24:15.036000             🧑  作者: Mango

如何在 Laravel 中向验证器错误添加自定义错误

Laravel 提供了强大的验证器来验证表单数据,我们可以通过自定义规则来验证数据的准确性。但是,有时我们需要向验证器中添加自定义错误以提供更好的用户体验。那么,在 Laravel 中如何向验证器错误添加自定义错误呢?

第一步:创建自定义消息

在 Laravel 中,我们可以通过 messages 方法来自定义验证器错误信息。首先,我们需要创建一个自定义消息数组,将验证规则和错误信息关联起来。

$messages = [
    'required' => 'The :attribute field is required.',
    'email' => 'The :attribute must be a valid email address.',
    'phone_number' => 'The :attribute is not a valid phone number.',
];

以上代码中,我们将 required 规则关联到错误信息 The :attribute field is required.,将 email 规则关联到错误信息 The :attribute must be a valid email address.,将 phone_number 规则关联到错误信息 The :attribute is not a valid phone number.

messages 数组中的 :attribute 占位符将被自动替换为字段名称。

第二步:添加自定义规则

接下来,我们需要添加自定义规则到验证器中。我们可以通过 Validator 类的 extend 方法来添加自定义规则。在自定义规则中,我们可以检查字段值是否满足我们的需求,并使用 Validator 类的 addError 方法来向验证器中添加自定义错误。

use Illuminate\Validation\Validator;

Validator::extend('phone_number', function ($attribute, $value, $parameters, $validator) {
    if (!preg_match('/^\d{10}$/', $value)) {
        $validator->addError($attribute, 'The phone number must be a 10-digit number.');
        return false;
    }
    
    return true;
});

以上代码中,我们将 phone_number 规则关联到自定义规则闭包中。在闭包中,我们首先检查手机号码是否正确,如果不正确,则使用 addError 方法向验证器中添加自定义错误信息 The phone number must be a 10-digit number.

第三步:应用自定义消息

最后,我们可以将自定义消息数组应用到验证器中,以便在验证失败时显示正确的错误信息。

$validator = Validator::make($request->all(), [
    'name' => 'required',
    'email' => 'required|email',
    'phone' => 'required|phone_number', // 使用自定义规则
], $messages);

if ($validator->fails()) {
    return response()->json([
        'errors' => $validator->errors(),
    ]);
}

以上代码中,我们通过第三个参数将自定义消息数组应用到验证器中。在验证器失败时,errors 方法将返回一个含有所有错误信息的关联数组,我们可以将其包含在返回的 JSON 响应中,以便客户端可以显示错误信息。

现在,在 Laravel 中向验证器错误添加自定义错误已经变得非常简单了,让我们来试试吧!