Laravel验证报错:validateNumeric|max方法不存在如何解决
触发原因
该报错由验证规则格式混用导致:
- Laravel支持两种验证规则写法:一种是所有规则用
|管道符拼接为单个字符串,另一种是每条规则作为独立元素组成数组。两种写法不能在同一个规则集里混着嵌套使用。 - 你当前采用数组格式定义规则,却在单个数组元素里写了
'numeric|max:90'这种带管道符的多规则拼接内容,框架会把整个字符串识别为单条规则名,尝试调用对应的validateNumeric|max验证方法,因方法不存在抛出异常。 - 配置里的
integer规则本身已覆盖numeric的校验能力(整数必然属于合法数字格式),numeric属于冗余配置,可直接删除。 - 你提交的字段值70本身符合数值校验要求,和报错无关。
修复方案
由于规则中包含自定义规则对象UniqueWhenNew,这类对象无法拼接进管道字符串,必须采用数组格式定义规则,将原本拼接的多规则拆分为独立数组项即可,修正后的规则代码:
['required', 'integer', 'max:90', new UniqueWhenNew]
如果需要保留numeric规则,可单独拆为一个数组元素(无实际业务价值,不推荐):
['required', 'integer', 'numeric', 'max:90', new UniqueWhenNew]
调整后即可正常通过校验,不会再触发该异常。
内容的提问来源于stack exchange,提问作者Bulent
相关产品推荐
相关产品推荐

