Laravel 5.3验证以检查输入值是否与规则中的给定值相同

时间:2016-12-28 11:13:54

标签: laravel laravel-5 laravel-5.3

我使用日期范围和它之间的总天数作为另一个字段。我希望使用Laravel 5.3验证来验证日期范围之间的持续时间字段数。 例如, 如果我给

$request->input('start_date') ="2016-12-28";
$request->input('end_date') = "2016-12-30";
$request->input('total_days') = "2";

然后应该有一个错误,说“总天数与持续时间不匹配”

请帮助我实现这一目标。

1 个答案:

答案 0 :(得分:2)

扩展验证器

您可以为此创建自定义验证规则,如下所示。扩展验证器并添加自定义规则。

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.'