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

Laravel验证:嵌套属性缺失未触发验证,是否正常及如何解决?

问题解答

这不是预期行为

当Payload缺失info.type时,'info.type'的required规则未触发,核心原因是你的Rule::requiredIf逻辑存在问题:直接通过request()->info['type']访问不存在的数组键会抛出Undefined array key错误,导致整个验证流程提前中断,info.type的验证规则根本没机会执行。

修复方案

要让info.type的验证在属性缺失时正常生效,需要做两处调整:

  1. 强制验证info为必填数组
    添加info字段的验证规则,确保info本身存在且是数组类型,这样嵌套字段的验证才能正常触发:

    'info' => ['required', 'array'],
    'info.type' => ['required', 'string'],
    'info.cas' => Rule::requiredIf(request()->input('info.type') === 'chemical'),
    
  2. 安全访问请求参数
    用request()->input('info.type')替代request()->info['type'],前者在字段不存在时会返回null,不会抛出错误,保证验证流程完整执行。同时注意原规则里的大小写问题:Payload中type值是小写的chemical,但规则里写的是大写Chemical,这会导致requiredIf判断失效,需要统一大小写。

验证逻辑说明

添加info的数组验证后,当Payload缺失info或info不是数组时,会先触发info的验证错误;当info存在但缺失type时,info.type的required规则会正常触发,返回对应的错误提示;只有当info.type等于chemical时,info.cas才会被要求必填。

内容的提问来源于stack exchange,提问作者Riza Khan

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 04:45:34