首页 > 解决方案 > 使用 required_with 和 required_with_all 对 3 个字段进行 Laravel 5.7 验证不起作用

问题描述

required_with我的问题是使用和required_with_all用于 Laravel 验证的逻辑是如何工作的?

我已阅读文档,但无法从文档链接中获得任何信息

我正在申请 3 个不同的领域

让我现在给你我的例子来得到我想要的

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

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

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

标签: laravelvalidationlaravel-5laravel-5.7laravel-request

解决方案


OP在这里真正想要的是:

  1. 能够在不重复出现的情况下提交开始和结束
  2. start 和 end 一起需要
  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.');
            }
        });
    }
}

推荐阅读