正在开发Laravel应用程序,从而正在进行两个日期的后端验证。这两个日期分别是出发日期和返回日期。
我已确认出发日期为必填日期,应为date类型,并且应为今天之后的日期。在返回日期,我已经确认需要这样做,应该是date类型,并且应该在出发日期之后3天或更长时间。所有这些验证逻辑都可以正常工作。
现在,我想实施一项验证,其中返回日期应在出发日期之后3天或更长时间,但应在出发日期之后不到180天。
验证功能
public function validateDates(Request $request){
//dd($request->all());
$validation = $this->validate($request, [
'departureDate' => 'required|date|after:now',
//Must be 3 days after departure date
'returnDate' => ['required', 'date', 'returnDate_after:departureDate,3' ]
],
[
'departureDate.after' => 'Your departure date should be tomorrow or any date in the future'
]
};
应用程序服务提供商中的自定义验证器,采用引导方式
public function boot(){
//Custom Validation
Validator::extend('valid_birth_date',
function ($attribute, $value, $parameters, $validator){
$date_different = date_diff(new \DateTime($value), new \DateTime())->y;
return $date_different >= 18;
});
//Deparrure and return date should have a difference of 3 days
$validator = app()->make(\Illuminate\Validation\Factory::class);
$validator->extend('return_date_after', function ($attribute, $value, $parameters, $validator) {
$otherAttribute = array_get($parameters, 0);
//default 4 days
$days = array_get($parameters, 1, 3);
$otherValue = array_get($validator->getData(), $otherAttribute);
if (strtotime($value) < strtotime($otherValue) + $days*24*60*60) {
return false;
}
return true;
});
$validator->replacer('return_date_after', function ($message, $attribute, $rule, $parameters) {
return 'Your return date should be '.array_get($parameters,1,3).' days or more after your '.array_get($parameters, 0);
});
//End departure and return date
}