Mik*_*ike 6 validation model laravel
如何在注册时查看用户的年龄?我想将最低年龄设定为13岁.我询问用户的出生日期,当我验证其他凭据时,我想检查他们实际上是13+.
我的User模型的摘录如下所示:
$rules = [
'name' => 'required|alpha|min:1',
'email' => 'required|email|unique:users',
'dob' => 'required|date'
];
Run Code Online (Sandbox Code Playgroud)
如何检查输入的日期是13年前还是更长?
我已经看到我可以使用Laravel Docs中的before:yyy-mm-dd规则,如下所示:
$rules = [
'name' => 'required|alpha|min:1',
'email' => 'required|email|unique:users',
'dob' => 'required|date|before:2001-04-15'
];
Run Code Online (Sandbox Code Playgroud)
Zan*_*n13 18
检查日期比N年更大(更旧)的简单方法是将before规则设置为减去N年.
$rules = [
'dob' => 'required|date|before:-13 years',
]
Run Code Online (Sandbox Code Playgroud)
Jar*_*zyk 12
RMcLeod的答案还可以,但我建议您将其解压缩为自定义规则:
Validator::extend('olderThan', function($attribute, $value, $parameters)
{
$minAge = ( ! empty($parameters)) ? (int) $parameters[0] : 13;
return (new DateTime)->diff(new DateTime($value))->y >= $minAge;
// or the same using Carbon:
// return Carbon\Carbon::now()->diff(new Carbon\Carbon($value))->y >= $minAge;
});
Run Code Online (Sandbox Code Playgroud)
通过这种方式,您可以将规则用于您喜欢的任何年龄:
$rules = ['dob' => 'olderThan']; // checks for 13 years as a default age
$rules = ['dob' => 'olderThan:15']; // checks for 15 years etc
Run Code Online (Sandbox Code Playgroud)
您可以使用带有laravel的Carbon
$dt = new Carbon\Carbon();
$before = $dt->subYears(13)->format('Y-m-d');
$rules = [
...
'dob' => 'required|date|before:' . $before
];
Run Code Online (Sandbox Code Playgroud)
这有点旧,但是我想分享我的做法。
public function rules()
{
return
[
...
'age' => 'required|date|before_or_equal:'.\Carbon\Carbon::now()->subYears(18)->format('Y-m-d'),
...
];
}
Run Code Online (Sandbox Code Playgroud)
使用before是不错的方法,但对最终用户来说却有点丑陋,因为如果今天是他的生日,他将无法通过。与before_or_equal您一起获得完美的行为。如果您针对全球受众,那么一种改善此问题的方法就是使用Carbon来检查时区。
| 归档时间: |
|
| 查看次数: |
11122 次 |
| 最近记录: |