Работа над приложением Laravel, посредством которого я работаю над проверкой серверной части двух дат. 2 даты в основном выездной даты и возвратной даты соответственно.
В день отъезда я подтвердил, что он должен быть обязательным, должен иметь дату типа и быть днем позже сегодняшнего дня. В день возвращения я подтвердил, что он должен быть обязательным, должен быть типа даты и должен быть через 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
}