You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 04:15:02