Respect Validation可选键验证问题:如何仅验证存在的可选字段
解决Respect Validation中“仅当键存在时验证”的问题
你遇到的核心问题是**key规则默认强制要求键必须存在**——哪怕你在值的验证链里加了optional,也只会作用于值本身,不会改变key规则对键存在性的要求。下面是两种完全符合你需求的正确实现方案:
方案1:使用key规则的第三个参数(推荐)
Respect Validation的key规则自带第三个布尔参数$mandatory,默认值为true(表示键必须存在)。把它设为false后,就会实现“键存在则验证值,不存在则直接跳过”的逻辑:
v::key('biography', v::stringType()->length(10, 1000), false)
方案2:用optional包裹整个key规则
另一种思路是把整个key规则放进optional里,这样当键不存在时,整个key验证环节会被直接跳过,不会抛出异常:
v::optional(v::key('biography', v::stringType()->length(10, 1000)))
为什么你原来的写法不生效?
你之前的代码:
v::key('biography', v::optional(v::stringType()->length(10, 1000)))
这里的optional只作用于值的验证逻辑(也就是当键存在但值为空时,会跳过长度检查),但key规则本身依然强制要求biography键必须存在,所以当键不存在时,还是会触发异常。
这两种方案都不需要提前添加不存在的键,完美匹配你“键存在才执行后续验证链”的诉求。
内容的提问来源于stack exchange,提问作者RockOnGom
相关产品推荐
相关产品推荐

