我需要在操作存储中检查一些特殊验证
check
我必须验证date_recurring_for_beginning与date_recurring_for_end之间的差额是否为3个月?
有解决方案吗?还是我必须创建一个自定义验证?
答案 0 :(得分:2)
您可以使用Validator::extend()
并创建自定义验证规则。喜欢
Validator::extend('valid_date_range', function ($attribute, $value, $parameters, $validator) {
$dateBeginning = \Carbon::createFromFormat('Y-m-d', $parameters[0]); // do confirm the date format.
$dateEnd = \Carbon::createFromFormat('Y-m-d', $value);
return $dateBeginning->diffInMonths($dateEnd) == $parameters[1];
});
您可以这样使用:
'date_recurring_for_end' => 'required|date|valid_date_range:date_recurring_for_beginning,3'
有关自定义验证的更多详细信息。请遵循文档。
答案 1 :(得分:0)
在app/Providers/AppServiceProvider
内创建自定义验证规则:
public function boot()
{
Validator::extend('date_difference', function ($attribute, $value, $parameters, $validator) {
$firstDate = Carbon::parse($parameters[0]);
$secondDate = Carbon::parse($parameters[1]);
$minDifference = (int)$parameters[2];
if($firstDate->diffInMonths($secondDate) < $minDifference)
return false;
return true;
});
}
要使用此规则:
$this->validate([
'some_field' => 'date_difference:date_one,date_two,3',
]);
希望有帮助。