【问题标题】:Laravel validationsLaravel 验证
【发布时间】:2025-12-01 04:45:01
【问题描述】:

我想用以下数据验证我的后端代码。我从我的角度前端传递日期为$request->get('date_from')$request->get('date_to') 和时间为$request->get('time_from')$request->get('time_to'),我将日期时间转换如下。

$dateTime_from=date('Y-m-d',strtotime($request->get('date_from'))).' '.$request->get('time_from');
$dateTime_to=date('Y-m-d',strtotime($request->get('date_to'))).' '.$request->get('time_to');

现在我想用 laravel 后端验证来验证 DateTime。 dateTime_from 应该小于 dateTime_to。如何在验证器中写下该代码?

$this->validate($request, [
            'vehicle_id'=>'required',
            'time_to'=>'required',
            'event_id'=>'required',

        ]);

【问题讨论】:

    标签: laravel validation


    【解决方案1】:

    您可以使用after 验证规则。

    $this->validate($request, [
      'vehicle_id' => 'required',
      'date_to'    => 'required|after:date_from',
      'event_id'   => 'required'
    ]);
    

    【讨论】:

    • 我想比较 $dateTime_from 和 $dateTime_to 有什么办法吗?
    • @GayalSeneviratne 这不是他发的吗?
    • @Cerlin 不仅 date_from 应该小于 $date_to。例如,假设前端是否通过了相同的 $date_from 和 $date_to。我也想澄清一下时间。例如 $dateTime_from=2019-1-5 08:30:00 $dateTime_to=2019-1-5 07:00:00 那么这个实例 $dateTime_from 大于 $dateTime_to。这是我要处理的问题
    • Laravel 使用 php 的 strtotime 方法。因此,在验证时也会考虑时间。所以请尝试上面提到的解决方案
    【解决方案2】:

    https://laravel.com/docs/5.8/validation#rule-after

    你可以像下面这样使用 after 规则

    'date_to' => 'required|date|after:date_from'
    

    您可以指定另一个字段与日期进行比较,而不是传递要由 strtotime 评估的日期字符串:

    另外,你也有rule-before

    编辑 我认为after 规则也考虑了时间,但不确定。

    而且你有非常复杂的验证要做,最好写一个 custom rule class 或一个闭包来为你处理它

    'date_to' => [ 'required', 
                   'date',
                   function ($attribute, $value, $fail) {
                      if (strtotime($value) <= strtotime($request->date_from) {
                      $fail(':attribute needs to be higher than date_from!'); // or whatever mesage ou need to send
                   }
                 ]
    

    【讨论】:

    • 不仅 date_from 应该小于 $date_to。例如,假设前端是否通过了相同的 $date_from 和 $date_to。我也想澄清一下时间。例如 $dateTime_from=2019-1-5 08:30:00 $dateTime_to=2019-1-5 07:00:00 那么这个实例 $dateTime_from 大于 $dateTime_to。这是我要处理的问题
    • 已编辑答案,请检查