Laravel中required_without和unique组合使用报isValid()调用null错误如何解决
触发原因
- 核心问题是混用了Laravel的两种验证规则书写规范:Laravel支持「竖线分隔的字符串格式」和「单规则为独立元素的数组格式」两种写法,但两种格式不能在同一个规则配置里混用。
- 你修改后的email规则中,将
email:rfc和unique:customers用|拼接后作为数组的单个元素,Laravel会把整段email:rfc|unique:customers错误识别为email验证规则的入参,传给底层egulias邮件验证库后导致验证类初始化失败返回null,调用isValid()方法时就抛出了对应错误。 - 当用户仅填写telephone字段时,email字段值为null,虽然配置了
nullable规则,但因为规则解析逻辑已经出错,依然会触发无效的邮件校验流程,不会跳过验证。
解决方法
将拼接在一起的两个规则拆分为数组的两个独立元素即可,修改后的规则如下:
public static array $createValidationRules = [ 'email' => ['required_without:telephone', 'nullable', 'email:rfc', 'unique:customers'], 'telephone' => ['required_without:email', 'nullable', 'numeric', 'regex:/^\d{5,15}$/'], ];
如果你偏好字符串格式的规则写法,也可以把整组email规则都改为竖线分隔的字符串,两种写法二选一即可:
'email' => 'required_without:telephone|nullable|email:rfc|unique:customers',
内容的提问来源于stack exchange,提问作者Elias
相关产品推荐
相关产品推荐

