自定义验证在 Laravel 5.4 中不起作用
Custom validation not working in Laravel 5.4
正在开发 Laravel 应用程序,其中正在处理两个日期的后端验证。 2个日期分别主要是departureDate和returnDate。
在出发日期,我试图验证它是否是必需的,应该是日期类型,并且应该是今天之后的日期。在 return 日期,我还尝试实施验证逻辑,据此 return 日期应在出发日期后 3 天或更长时间,但应在出发日期后不到 180 天。
验证函数
public function validateDates(Request $request){
//dd($request->all());
$now = new \DateTime();
$after_date = $now->parse($this->departureDate)->addDays(3);
$maxdays = $now->parse($this->departureDate)->addDays(180);
$validation = $this->validate($request, [
'departureDate' => 'required|date|after:now',
'returnDate' => 'required|date_format:"Y-m-d"|after:' . $after_date->toDateString().'|before:' . $maxdays->toDateString()
],
[
'departureDate.after' => 'Your departure date should be tomorrow or any date in the future',
'returnDate.after' => 'Your return date should be 3 or more days after the departure date',
'returnDate.before' => 'Your return date should be no more than 180 days from the departure date',
]
};
我觉得你的逻辑没问题。但是,您可能希望改用 Carbon。它有您正在寻找的 parse()
方法。还有 addDays()
和 toDateString()
.
因此,在文件顶部添加以下语句:
use Carbon\Carbon;
然后将您的 validateDate()
方法更改为此方法:
public function validateDates(Request $request)
{
$after_date = Carbon::parse($this->departureDate)->addDays(3)->toDateString();
$max_days = Carbon::parse($this->departureDate)->addDays(180)->toDateString();
$validation = $this->validate($request,
[
'departureDate' => 'required|date|after:now',
'returnDate' => 'required|date_format:"Y-m-d"|after:' . $after_date . '|before:' . $max_days
],
[
'departureDate.after' => 'Your departure date should be tomorrow or any date in the future',
'returnDate.after' => 'Your return date should be 3 or more days after the departure date',
'returnDate.before' => 'Your return date should be no more than 180 days from the departure date',
]
);
};
我假设您在某处定义了出发日期,因此您使用的是 $this->departureDate
,但如果它来自您的请求,您应该将其更改为 $request->departureDate
例如。
正在开发 Laravel 应用程序,其中正在处理两个日期的后端验证。 2个日期分别主要是departureDate和returnDate。
在出发日期,我试图验证它是否是必需的,应该是日期类型,并且应该是今天之后的日期。在 return 日期,我还尝试实施验证逻辑,据此 return 日期应在出发日期后 3 天或更长时间,但应在出发日期后不到 180 天。
验证函数
public function validateDates(Request $request){
//dd($request->all());
$now = new \DateTime();
$after_date = $now->parse($this->departureDate)->addDays(3);
$maxdays = $now->parse($this->departureDate)->addDays(180);
$validation = $this->validate($request, [
'departureDate' => 'required|date|after:now',
'returnDate' => 'required|date_format:"Y-m-d"|after:' . $after_date->toDateString().'|before:' . $maxdays->toDateString()
],
[
'departureDate.after' => 'Your departure date should be tomorrow or any date in the future',
'returnDate.after' => 'Your return date should be 3 or more days after the departure date',
'returnDate.before' => 'Your return date should be no more than 180 days from the departure date',
]
};
我觉得你的逻辑没问题。但是,您可能希望改用 Carbon。它有您正在寻找的 parse()
方法。还有 addDays()
和 toDateString()
.
因此,在文件顶部添加以下语句:
use Carbon\Carbon;
然后将您的 validateDate()
方法更改为此方法:
public function validateDates(Request $request)
{
$after_date = Carbon::parse($this->departureDate)->addDays(3)->toDateString();
$max_days = Carbon::parse($this->departureDate)->addDays(180)->toDateString();
$validation = $this->validate($request,
[
'departureDate' => 'required|date|after:now',
'returnDate' => 'required|date_format:"Y-m-d"|after:' . $after_date . '|before:' . $max_days
],
[
'departureDate.after' => 'Your departure date should be tomorrow or any date in the future',
'returnDate.after' => 'Your return date should be 3 or more days after the departure date',
'returnDate.before' => 'Your return date should be no more than 180 days from the departure date',
]
);
};
我假设您在某处定义了出发日期,因此您使用的是 $this->departureDate
,但如果它来自您的请求,您应该将其更改为 $request->departureDate
例如。