Laravel如何实现target为ads时expires_at非必填其余情况必填的验证
正确验证规则写法
你需要的逻辑刚好匹配Laravel自带的required_unless验证规则,该规则语义为「除非指定字段等于给定值,否则当前字段必填」,完全符合你的需求:
'target' => ['required', Rule::in(['ads', 'users', /* 其余可选值 */])], 'expires_at' => 'required_unless:target,ads',
可选扩展写法
如果后续需要添加更复杂的联动逻辑,可以使用条件验证的when方法实现:
$validated = $request->validate([ 'target' => ['required', Rule::in(['ads', 'users', /* 其余可选值 */])], // 其他字段的验证规则 ])->when( fn ($request) => $request->target !== 'ads', fn ($validator) => $validator->addRules(['expires_at' => 'required']) );
原写法错误原因
你之前用的required_if:target,!=,ads写法不符合Laravel原生required_if的语法规范,required_if仅支持判断字段等于指定值时触发必填,不支持直接写不等于运算符。
内容的提问来源于stack exchange,提问作者saa
相关产品推荐
相关产品推荐

