基于来自 FormRequest rules() 方法的另一个输入值的不同输入验证规则

Different validation rules for input based on another input value from FormRequest rules() method

是否可以根据另一个输入的值有条件地验证输入字段?

例如,输入 type 的值可以是 lettersnumbers,然后还有另一个字段包含 value 输入。

我希望 value 输入验证规则在类型为 letters 时为 alpha,在类型为 numbers[=21= 时为 numeric ]

我已经在 rules 方法中使用管道验证类型:

public function rules()
{
    return [
        "type" => 'required',
        "value" => 'required|min:1|max:255',
    ];
}

您可以使用 Rule::when($condition, $rules).

<?php

use Illuminate\Validation\Rule;

public function rules()
{
    return [
        'type' => ['required'],
        'value' => [
            'required',
            'min:1',
            'max:255',
            Rule::when($this->type === 'letters', ['alpha']),
            Rule::when($this->type === 'numbers', ['numeric']),
        ],
    ];
}

请检查Complex Conditional Validation,它是您请求的解决方案。文档中已经给出了一个示例,但是您的代码块将如下所示。

use Illuminate\Support\Facades\Validator;

$validator = Validator::make($request->all(), [
    'type' => 'required',
]);

$validator->sometimes('value', 'required|min:1|max:255|numeric', function ($input) {
    return $input->type == 'numbers';
});

$validator->sometimes('value', 'required|min:1|max:255|alpha', function ($input) {
    return $input->type == 'letters';
});