【问题标题】:Laravel 5.3 validation to check whether a input value is same as given value in ruleLaravel 5.3 验证以检查输入值是否与规则中的给定值相同
【发布时间】:2016-12-28 20:32:18
【问题描述】:

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

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

那么应该会有错误说“总天数与duration不匹配”

请帮助我实现这一目标。

【问题讨论】:

    标签: laravel laravel-5 laravel-5.3


    【解决方案1】:

    扩展验证器

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

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

    【讨论】:

      猜你喜欢
      • 2014-05-20
      • 2021-05-12
      • 2016-09-07
      • 1970-01-01
      • 2016-07-24
      • 2021-10-22
      • 2020-03-08
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多