如何进行 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'
我正在为我的约会表格苦苦挣扎。这是我的看法:
<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'