Laravel验证器的sometimes与nullable规则有何区别?求最简示例说明
Laravel验证规则
sometimes与nullable差异说明 核心逻辑定义
sometimes:仅当请求中存在对应字段时,才执行该字段后绑定的所有验证规则;字段不存在时直接跳过该字段的全部校验,不会触发任何规则。nullable:允许字段的取值为null;如果字段存在且值为null,会自动跳过该字段后续的所有验证规则,直接判定该字段校验通过。
极简对比示例
验证规则目标
校验用户提交的age字段,要求如果是有效值必须是≥18的整数。
规则1:使用sometimes
验证器代码:
use Illuminate\Support\Facades\Validator; $validator = Validator::make($requestParams, [ 'age' => 'sometimes|integer|min:18' ]);
不同输入的验证结果:
- 不提交
age字段:✅ 验证通过 - 提交
age: null:❌ 验证失败(字段存在,触发integer规则,null不符合整数要求) - 提交
age: 20:✅ 验证通过 - 提交
age: 16:❌ 验证失败
规则2:将sometimes替换为nullable
验证器代码:
use Illuminate\Support\Facades\Validator; $validator = Validator::make($requestParams, [ 'age' => 'nullable|integer|min:18' ]);
不同输入的验证结果:
- 不提交
age字段:✅ 验证通过 - 提交
age: null:✅ 验证通过(nullable允许值为null,自动跳过后续integer/min规则) - 提交
age: 20:✅ 验证通过 - 提交
age: 16:❌ 验证失败
核心差异总结
两个规则的作用维度完全不同:
sometimes判断的是「字段是否出现在请求中」要不要做校验,nullable判断的是「已提交的字段值为null」能不能通过校验。
上述示例中,提交age: null的场景下两个规则的验证结果完全相反,就是二者最直观的区别。
内容的提问来源于stack exchange,提问作者Zbigniew Kisły
相关产品推荐
相关产品推荐

