📜  基于另一个字段值的 laravel 表单验证 - PHP (1)

📅  最后修改于: 2023-12-03 14:51:35.977000             🧑  作者: Mango

基于另一个字段值的 Laravel 表单验证

在 Laravel 中,表单验证是一项非常重要的任务。但是,有时您可能需要验证一个字段的值是否取决于另一个字段的值。这可以通过 Laravel 表单验证中提供的许多规则之一来轻松完成。

same 规则

该规则可用于验证某个字段的值是否与另一个字段的值相同。例如,如果您要验证两个密码是否相同,则可以使用以下代码:

public function rules()
{
    return [
        'password' => 'required',
        'password_confirmation' => 'required|same:password',
    ];
}

以上代码将确保 password_confirmation 字段的值必须与 password 字段的值相同。

自定义规则

如果您需要更高级的验证,Laravel 表单验证允许您自定义验证规则。您可以创建一个自定义规则,并根据需要将其分配给任何验证器。

以下是一个示例自定义规则,用于确保通过 value 参数传递的值必须大于另一个字段的值。在下面的示例中,假设 other_field 是另一个字段的名称。

Validator::extend('greater_than_other_field', function ($attribute, $value, $parameters, $validator) {
    $otherField = $parameters[0];
    $data = $validator->getData();
    return $value > $data[$otherField];
});

然后,您可以在验证器中将此自定义规则指定为规则之一:

public function rules()
{
    return [
        'field1' => 'required',
        'field2' => 'required|greater_than_other_field:field1',
    ];
}

上述代码将确保 field2 的值大于 field1 的值。

自定义规则错误消息

默认情况下,当验证规则不通过时,Laravel 表单验证将使用默认错误消息。如果您需要的话,可以为自定义规则指定自定义错误消息:

public function messages()
{
    return [
        'greater_than_other_field' => 'The :attribute must be greater than the other field.',
    ];
}

在上述代码中,greater_than_other_field 是自定义规则的名称,而 :attribute 将替换为验证失败的字段名称。

结论

Laravel 表单验证提供了许多内置的规则,涵盖了大多数常见的表单验证需求。但是,有时您可能需要根据另一个字段的值进行高级验证,这可以通过自定义规则轻松完成。