将Laravel中的日期验证为在另一个日期字段之后6天



我正在处理Laravel表单字段,并添加了2个日期输入字段(出发日期和返回日期(。我正试图在Laravel中创建一个自定义后端验证,即出发日期必须在现在之后,而返回日期必须在出发日期后6天。请帮忙?

验证参数

'departure_date' => 'required|date|after:now',
//Must be 6 days after departure date
'return_date' => 'required|date|after:departure_date + 6 day',

我使用的验证逻辑

//Added at the top of the controller
use IlluminateFoundationHttpFormRequest;
//Controller code
public
function validatePlanEntries(Request $request)
{   
$validation = $this->validate($request, [
'departure_date' => 'required|date|after:now',
//Must be 6 days after departure date
'return_date' => ['required', 'date', function ($attribute, $value, $fail) {
if (strtotime($value) < strtotime(request('departure_date')) + 518400) {
$fail('Departure date invalid');
}
}
]
]
}

您可以使用Closure解决方案。

$validator = Validator::make($request->all(), [
'departure_date' => 'required|date|after:now',
//Must be 6 days after departure date
'return_date' => ['required', 'date', function ($attribute, $value, $fail) {
if (strtotime($value) < strtotime(request('departure_date')) + 518400 /* 6*24*60*60 */) {
$fail('Departure date invalid');
}
}
],
]
);

编辑

你不需要在上面添加FormRequest,你的代码中就会缺少一个裂缝。

function validatePlanEntries(Request $request)
{
$validator = Validator::make($request, [
'departure_date' => 'required|date|after:now',
//Must be 6 days after departure date
'return_date' => ['required', 'date', function ($attribute, $value, $fail) {
if (strtotime($value) < strtotime(request('departure_date')) + 518400) {
$fail('Departure date invalid');
}
}]
]);
if ($validator->fails()) {
//return errors in $validation->error();
}
//else continue
}

使用此

$date = CarbonCarbon::parse($date_from);
$sixdays = $date->addDays(6);

并设置此规则

$rule['return_date'] = 'required|date|before:'.$sixdays
$message['return_date.before'] = 'This field is must before 6 days of starts date';

相关内容