Laravel 5.6非必填出生日期验证异常:空值仍报错的解决方案求助
解决Laravel(Esensi Model)中非必填日期字段的验证问题
你遇到的问题核心在于:当前的验证规则没有考虑字段为空的场景——即便date_of_birth留空,date_format和before规则依然会强制执行,空字符串自然不符合日期格式要求,所以触发了验证错误。
修复方案:添加nullable规则
只需要在date_of_birth的验证规则开头加上nullable,这样当字段为空时,会跳过后续的格式和日期校验;只有当用户填写了内容时,才会检查格式是否正确、是否为未来日期。
修改后的Member.php模型代码:
use Esensi\Model\Model; class Member extends Model { protected $rules = [ 'name' => 'required|alpha|min:2|max:255', 'surname' => 'required|alpha|min:2|max:255', 'id_number' => 'required|unique:members,id_number|digits:13', 'mobile_number' => 'required|digits:10', 'email' => 'required|email', 'date_of_birth' => 'nullable|date_format:Y-m-d|before:today', ]; }
额外注意:日期格式的正确性
另外需要提醒你,你原来写的date_format:Y-M-D可能存在格式错误:
M是月份的缩写(比如Jan),D是星期几的缩写(比如Mon),如果你的表单提交的是年-月-日的数字格式(比如2024-05-20),应该用Y-m-d作为格式规则;- 如果确实是要接受
2024-May-20这样的格式,那应该写成Y-M-d(注意小写的d表示两位日期),避免D导致的验证失败。
控制器代码无需修改
你的MemberController的store方法逻辑没问题,Esensi Model会自动根据模型里定义的$rules处理验证,不需要额外调整。
这样修改后,用户留空date_of_birth时不会触发验证错误,只有填写了不符合格式或未来日期的内容时才会报错。
内容的提问来源于stack exchange,提问作者jproux
相关产品推荐
相关产品推荐

