Laravel 验证 - 取决于另一个输入字段的值

Son*_*nal 8 php laravel

我有 2 个字段 status 和 releaseYear 和 productionYear。我必须验证:

 $request->
    'productionYear' => 'nullable|digits:4',
    'releaseYear'    => 'required|digits:4|after_or_equal:year_of_production',
    'status'         =>'required|in:Released,UnReleased',
 ]);
Run Code Online (Sandbox Code Playgroud)

我如何进行以下验证:如果状态设置为已发布,则生产年份和发布年份不应大于今年。

如果状态设置为未发布,则生产年份自今年起不应超过一年

Car*_*ter 6

您可以使用lte这样的规则:

'productionYear' => 'nullable|digits:4|lte:releaseYear',
'releaseYear'    => 'required|digits:4',
Run Code Online (Sandbox Code Playgroud)

请参阅文档


Sau*_*nam 6

您可以尝试如下所示的自定义验证。我没有测试过,希望这能给你一个想法。

    use Illuminate\Support\Facades\Input;


    'status'         => 'required|in:Released,UnReleased',
    'productionYear' => [
            'nullable',
            'digits:4',
            function($attribute, $value, $fail) {
                $status = Input::get('status'); // Retrieve status

                if ($status === 'Released' && $value > now()->year) {
                    return $fail($attribute.' is invalid.');
                } elseif ($status === 'UnReleased' && $value > (now()->year + 1)) {
                    return $fail($attribute.' is invalid.');
                }
            },
        ],
Run Code Online (Sandbox Code Playgroud)