【问题标题】:Time validation rules in laravel 6 - after | beforelaravel 6 中的时间验证规则前
【发布时间】:2020-06-28 09:25:31
【问题描述】:

检查了这个question 类似但对我的情况没有帮助。

我有多个时间输入,我需要确保开始时间不应大于结束时间。

我的输入请求转储是

array:2 [▼
  "_token" => "nYb7gSp5TGTcrU9nNW9PMjJTduohLZFDLCzLGPbq"
  "timings" => array:8 [▼
    "day_1" => array:1 [▼
      0 => "1"
    ]
    "day_2" => array:1 [▼
      0 => "1"
    ]
    "day_3" => array:1 [▼
      0 => "1"
    ]
    "day_4" => array:1 [▼
      0 => "1"
    ]
    "day_5" => array:1 [▼
      0 => "1"
    ]
    "day_6" => array:1 [▼
      0 => "1"
    ]
    "day_7" => array:1 [▼
      0 => "1"
    ]
    "session" => array:1 [▼
      0 => array:2 [▼
        "start" => array:2 [▼
          0 => "14:00 PM"
          1 => null
        ]
        "end" => array:2 [▼
          0 => "15:00 PM"
          1 => null
        ]
      ]
    ]
  ]
]

到目前为止我所做的是

$rules = [
    'timings.session.*.start.*' => 'nullable|date_format:H:i|before:timings.session.*.end.*',
    'timings.session.*.end.*' => 'nullable|date_format:H:i|after:timings.session.*.start.*',
];

$messages = [
    'timings.session.*.start.*.before' => 'Start Time should be before End Time',
    'timings.session.*.end.*.after' => 'End Time should be after Start Time',
];
$validator = Validator::make($request->all(), $rules, $messages);

dd($validator->errors());

仍然收到错误的错误信息是

Illuminate\Support\MessageBag {#780 ▼
  #messages: array:2 [▼
    "timings.session.0.start.0" => array:2 [▼
      0 => "The timings.session.0.start.0 does not match the format H:i."
      1 => "Start Time should be before End Time"
    ]
    "timings.session.0.end.0" => array:2 [▼
      0 => "The timings.session.0.end.0 does not match the format H:i."
      1 => "End Time should be after Start Time"
    ]
  ]
  #format: ":message"
}

问题:

a.) 如何为时间输入设置正确的验证规则,以确保开始时间不应大于结束时间?

b.) 如何设置另一个验证规则以匹配至少一个复选框被选中以进行日期选择?

谢谢,希望对其他人也有帮助。

【问题讨论】:

  • 也尝试使用“H:i A”

标签: laravel validation time laravel-6 laravel-validation


【解决方案1】:

抱歉,经过一番尝试后,我自己找到了一个解决方案,只需要删除 date_format

更新规则是

$rules = [
    'timings.session.*.start.*' => 'nullable|before:timings.session.*.end.*',
    'timings.session.*.end.*' => 'nullable|after:timings.session.*.start.*',
];

但仍然等待第二条规则,至少任何一个复选框被勾选

【讨论】:

    【解决方案2】:

    请尝试这样使用可能对你有帮助

    $validator = Validator::make($request->all(),[
        'timings.session.*.start.*'  => 'required|date_format:h:iA',
        'timings.session.*.end.*'=>'required|date_format:h:iA|after:start_time',
    ]);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-05-13
      • 2020-05-17
      • 1970-01-01
      • 2020-06-09
      • 1970-01-01
      • 2021-03-01
      • 1970-01-01
      • 2019-03-21
      相关资源
      最近更新 更多