📌  相关文章
📜  在 laravel 表单验证错误消息中给出自定义字段名称 - PHP (1)

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

在 Laravel 表单验证错误消息中给出自定义字段名称 - PHP

在 Laravel 中,表单验证是一个重要的功能。有时候,我们需要在表单验证错误消息中给出自定义字段名称来提供更有用的信息。本文将介绍如何在 Laravel 中实现这一功能。

表单验证

在 Laravel 中,表单验证是通过验证器类实现的。我们可以使用 make() 方法创建一个验证器实例,然后调用 validate() 方法对输入数据进行验证。

例如,下面的代码片段演示了如何使用验证器类验证用户输入的邮箱和密码:

$input = $request->all();

$validator = Validator::make($input, [
    'email' => 'required|email',
    'password' => 'required|min:6',
]);

if ($validator->fails()) {
    return redirect('login')
        ->withErrors($validator)
        ->withInput();
}

// 验证通过
自定义错误消息

在上面的代码片段中,如果输入数据验证失败,我们使用 withErrors() 方法将验证器实例中的错误消息传递给视图。默认情况下,Laravel 将使用字段的名称作为错误消息的键名,例如,如果邮箱字段验证失败,那么错误消息将以 email 作为键名存储在错误消息数组中。

我们可以通过在 Validator::make() 方法的第三个参数中传递自定义错误消息数组来覆盖默认的错误消息。例如,下面的代码片段演示了如何自定义邮箱字段的错误消息:

$messages = [
    'email.required' => '请输入邮箱地址',
    'email.email' => '请输入有效的邮箱地址',
];

$validator = Validator::make($input, [
    'email' => 'required|email',
    'password' => 'required|min:6',
], $messages);

在上面的代码片段中,我们将自定义错误消息数组传递给了验证器实例,并指定了两条自定义错误消息。

但是,如果我们想要在错误消息中使用自定义的字段名称而不是默认的字段名称,该怎么办呢?我们可以通过自定义规则来实现这一功能。

自定义规则

在 Laravel 中,我们可以使用 Validator::extend() 方法自定义规则。例如,下面的代码片段演示了如何创建一个名为 display_name 的规则:

Validator::extend('display_name', function ($attribute, $value, $parameters, $validator) {
    return $value === 'Laravel';
});

在上面的代码片段中,我们创建了一个名为 display_name 的规则,它返回一个布尔值用于指示输入数据是否通过验证。该规则将接收四个参数:

  • $attribute:当前正在验证的属性名称。
  • $value:属性的值。
  • $parameters:规则中的参数数组。
  • $validator:当前验证器实例。

下面是一个在 display_name 规则中使用自定义字段名称的示例:

$messages = [
    'display_name' => 'The :attribute field must be equal to "Laravel".',
];

$validator = Validator::make($input, [
    'name' => 'display_name',
], $messages)->setAttributeNames([
    'name' => 'display name',
]);

在上面的代码片段中,我们首先指定了自定义错误消息,然后使用 setAttributeNames() 方法将自定义字段名称设置为 display name

现在,如果 name 字段的值不等于 Laravel,错误消息将使用自定义的字段名称替代默认的键名 name

总结

在本文中,我们介绍了如何在 Laravel 表单验证错误消息中给出自定义字段名称。我们通过自定义规则和自定义错误消息来实现这一功能。希望本文能够帮助您更好地使用 Laravel 表单验证功能。