Laravel 5.3 验证以检查输入值是否与规则中的给定值相同
Laravel 5.3 validation to check whether a input value is same as given value in rule
我将日期范围和日期范围之间的总天数用作另一个字段。我希望使用 Laravel 5.3 验证来验证天数字段与日期范围之间的持续时间。
例如,
如果我给
$request->input('start_date') ="2016-12-28";
$request->input('end_date') = "2016-12-30";
$request->input('total_days') = "2";
那么应该会报错说"the total number of days mismatch with the duration"
请帮助我实现这一目标。
扩展验证器
您可以为此创建自定义验证规则,如下所示。扩展验证器并添加您的自定义规则。
Validator::extend('sameDuration', function ($attribute, $value, $parameters) {
$startDate = Carbon::createFromFormat('Y-m-d', $parameters[0]);
$endDate = Carbon::createFromFormat('Y-m-d', $parameters[1]);
$length = $endDate->diffInDays($startDate);
return $length == $value;
});
您应该在 AppServiceProvider 的引导方法中注册它。
使用自定义规则
您可以像下面那样在您的控制器中使用它。
$this->validate($request, [
'total_days' => 'sameDuration:' . $request->get('start_date') . ',' . $request->get('end_date')
]);
添加错误消息
您可以在验证语言文件中添加验证失败错误消息(位于 resources/lang/en/validation.php)。确保将其添加到数组的第一级。
'sameDuration' => 'Total number of days doesn't match the chosen date range.'
我将日期范围和日期范围之间的总天数用作另一个字段。我希望使用 Laravel 5.3 验证来验证天数字段与日期范围之间的持续时间。 例如, 如果我给
$request->input('start_date') ="2016-12-28";
$request->input('end_date') = "2016-12-30";
$request->input('total_days') = "2";
那么应该会报错说"the total number of days mismatch with the duration"
请帮助我实现这一目标。
扩展验证器
您可以为此创建自定义验证规则,如下所示。扩展验证器并添加您的自定义规则。
Validator::extend('sameDuration', function ($attribute, $value, $parameters) {
$startDate = Carbon::createFromFormat('Y-m-d', $parameters[0]);
$endDate = Carbon::createFromFormat('Y-m-d', $parameters[1]);
$length = $endDate->diffInDays($startDate);
return $length == $value;
});
您应该在 AppServiceProvider 的引导方法中注册它。
使用自定义规则
您可以像下面那样在您的控制器中使用它。
$this->validate($request, [
'total_days' => 'sameDuration:' . $request->get('start_date') . ',' . $request->get('end_date')
]);
添加错误消息
您可以在验证语言文件中添加验证失败错误消息(位于 resources/lang/en/validation.php)。确保将其添加到数组的第一级。
'sameDuration' => 'Total number of days doesn't match the chosen date range.'