如何进行 CodeIgniter 4 日期验证以使用户只能提交未来的日期?

How to make CodeIgniter 4 date validation to enable users to submit only future dates?

我正在为我的约会表格苦苦挣扎。这是我的看法:

<div class="form-group">
       <label for="date">Date</label>
       <input type="date" name="date">
       <span class="text-danger"><?= isset($validation) ? display_error($validation, 'date') : '' ?></span>
</div>

我正在向我的控制器发送日期,如果输入日期是当前日期或早于当前日期,我想显示错误。这是我的控制器:

$sysDate = date("Y/m/d");

$validation = $this->validate([
    'date' => [
         'rules' => 'required|greater_than[' . $sysDate . ']',
         'errors' => [
               'required' => 'Appointment Date is required',
               'greater_than' => 'Date should be in the future'
          ]
     ]
]);

        
if(!$validation){
    return view('dashboard/index', ['validation' => $this->validator]);
}
else{
    echo 'Valid';
}

执行此操作后,即使我在接下来的几天发送日期,也会收到错误消息。是否有任何解决方案,或者我应该制定自定义验证规则?

所以昨晚,我挖了很多东西,找到了我自己的问题的答案。如果您的观众遇到了与我相同的问题,那么我想我在这里的回答会有所帮助。

首先,我查找 CodeIgniter\Validation\FormatRules 以查找已编译的验证规则。然后看着给定的规则,我明白了我想做的。在这里,我在 FormatRules.php 中创建了一个函数,而不是创建其他自定义验证规则文件并编写了我自己的规则:

public function future_date(string $str = null): bool
{

    $curdate = date("Y/m/d");

    $date1 = date_create($curdate);
    $date2 = date_create($str);

    if($date1 < $date2)
    {
        return true;
    }
    else{
        return false;
    }
}

`

然后在我的控制器中,我制作了这条验证线: 'rules' => 'required|future_date'