我想在验证中比较两个日期。我的意思是用户将输入开始日期和结束日期。我想验证开始日期,它不能是昨天。结束日期不会在开始日期之前。请指导我进行laravel验证。
答案 0 :(得分:1)
我建议您对日期进行自定义验证,
将以下函数放在App\Providers\ValidationServiceProvider
类boot()
方法
//end date must be equal to value or greate than value
Validator::extend('dateequalorearlier', function($attribute, $value, $parameters, $validator) {
$date_compare = array_get($validator->getData(), $parameters[0]);
return Carbon::parse($date_compare) >= Carbon::parse($value);
});
//end date must be greater
Validator::extend('dateearlier', function($attribute, $value, $parameters, $validator) {
$date_compare = array_get($validator->getData(), $parameters[0]);
return Carbon::parse($date_compare) > Carbon::parse($value);
});
//start time must be earlier
Validator::extend('earliertime', function($attribute, $value, $parameters, $validator) {
$time_compare = array_get($validator->getData(), $parameters[0]);
return Carbon::parse($time_compare) > Carbon::parse($value);
});
我定义了三个新的自定义验证,一个用于日期相同或更早,第二个用于更早的日期,第三个用于更早的时间,如果不需要时间验证,则只需删除它们。
您必须在语言验证文件中放置相应的错误消息,并在resources\lang\validation.php
中找到它。
'dateequalorearlier' => 'The Start date must be an earlier date or Same date from End date',
'dateearlier' => 'The Start date must be an earlier date from End date',
'earliertime' => 'The Start time must be an earlier time from End time',
然后您可以随意使用自定义验证,如以下代码段所示。
$rules = [
'start_date' => 'required|date|dateequalorearlier:end_date',
'end_date' => 'required|date',
];
$messages = [
'start_date.required' => 'Start date is a required field.',
'start_date.date' => 'Start date must be in a valid date format (YYYY-MM-DD).',
'start_date.dateequalorearlier' => 'Start date must be an earlier date or Same date from End date.',
'end_date.required' => 'End date is a required field.',
'end_date.date' => 'End date must be in a valid date format (YYYY-MM-DD).',
];
$validator = Validator::make($request->all(),$rules,$messages);
if($validator->fails()){
$this->throwValidationException($request,$validator);
}
确保您在验证时已包含验证器外观。
use Illuminate\Support\Facades\Validator;