我正在处理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';