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

pil*_*eup 4 laravel laravel-8

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

例如,有一个type可以包含值的输入letters,或者numbers,然后有另一个包含该value输入的字段。

我希望value输入验证规则是alphaif type islettersnumericif type isnumbers

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

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

小智 7

您可以使用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']),
        ],
    ];
}
Run Code Online (Sandbox Code Playgroud)