Laravel 5.7 对 3 个字段使用 required_with 和 required_with_all 的验证不起作用

Laravel 5.7 validation using required_with and required_with_all for 3 fields does not work

我的问题是使用 required_withrequired_with_all 进行 Laravel 验证的逻辑如何工作?

我已阅读文档,但无法从中得到任何信息documentation link

我申请了 3 个不同的领域

现在让我举个例子来得到我想要的

'start' => 'nullable|required_with:end',
'end' => 'nullable|required_with:start',
'repeat' => 'nullable|required_with_all:start,end',

如果我只提交重复字段,则不会在 Laravel 中执行任何验证。

您可以从我复制的代码中删除 nullable is,如果您只提供重复字段,仍然不会执行任何验证。

OP真正想要的是:

  1. 能够提交开始和结束而不重复出现
  2. 开始和结束必须在一起
  3. 如果存在开始或结束,则无法提交重复
use Illuminate\Validation\Validator;

class MyFormRequest extends FormRequest
    ...

    public function rules()
    {
        return [
          'start' => 'required_with:end|required_without:repeat',
          'end' => 'required_with:start|required_without:repeat',
          'repeat' => 'required_without_all:start,end',
        ];
    }

    public function withValidator(Validator $validator)
    {
        $validator->after(function ($validator) {
            if ((!$this->input('start') || !$this->input('end')) && $this->input('repeat')) {
                $validator->errors()->add('repeat', 'The repeat field is required when start and end are present.');
            }
        });
    }
}