Pau*_* Z. 22 php validation laravel laravel-5.3
我正在使用Laravel 5.3来验证事件的start_date和end_date.end_date应该等于start_date或after date.end_date >= start_date
$validator = Validator::make($data, [
'start_date' => 'required|date',
'end_date' => 'required|date|after:start_date',
]);
Run Code Online (Sandbox Code Playgroud)
我尝试使用after,但它仅适用于end_date> start_date.当然,我可以使用添加自定义规则Validator::extend,但我想知道我们是否可以不添加自定义规则.
有没有办法添加否定规则或添加> =规则?
谢谢
小智 37
$validator = Validator::make($data, [
'start_date' => 'required|date',
'end_date' => 'required|date|after_or_equal:start_date',
]);
Run Code Online (Sandbox Code Playgroud)
使用after_or_equal
Jam*_*ond 13
当您设置验证规则after_or_equal:now并且date_format格式没有小时、分钟或秒时要小心!
例如:
$validationRules = [
'my_time_start' => [
'date_format:Y-m-d',// format without hours, minutes and seconds.
'after_or_equal:now'
]
];
Run Code Online (Sandbox Code Playgroud)
Laravel 将所有日期字段传递给strtotime()函数。包括now字符串。而strtotime('now')会返回一个Unix时间戳与当前的分钟,小时,秒。
例如,今天的日期是2020-05-03。当您将日期值发送2020-05-03到脚本中时,Laravel 会将 2 个值传递strtotime()给比较:
strtotime('2020-05-03'); // always 1588489200
strtotime('now'); // NOT PREVIOUS VALUE, a different value each second, timestamp including current minutes, hour and seconds.
Run Code Online (Sandbox Code Playgroud)
并且您将始终无法通过验证(一天中的 1 秒除外)。
要修复它,您应该使用:
$validationRules = [
'my_time_start' => [
'date_format:Y-m-d',// format without hours, minutes and seconds.
'after_or_equal:' . date('Y-m-d'), // not 'now' string
]
];
Run Code Online (Sandbox Code Playgroud)
实际上,当至少使用 Laravel 版本时,您还可以使用after_or_equal和。这可能有助于避免升级到更高的 Laravel 版本。before_or_equal5.3.31
| 归档时间: |
|
| 查看次数: |
18885 次 |
| 最近记录: |