Yii2中“忽略字段”实为控制单条验证规则的执行时机,通过skipOnEmpty和skipOnError属性实现:前者决定是否跳过空值校验,后者决定是否跳过已有错误的校验。

Yii2 中“忽略字段”不是靠全局开关,而是通过验证规则的配置项来控制单条规则是否跳过空值或已有错误。关键在于 skipOnEmpty 和 skipOnError 两个属性。
让验证器不跳过空值
默认情况下,多数验证器(如 required 以外的)遇到空字段(null、空字符串、空数组等)会直接跳过,不执行校验逻辑。若你想强制对空值也校验(比如判断“空”本身是否合法),需显式关闭跳过行为:
- 在 rules 数组中添加
'skipOnEmpty' => false - 例如校验 country 只能是 'USA' 或 'Web',即使用户没填也要报错:
让验证器不跳过已有错误
当某个字段已因其他规则(如 required)失败时,后续规则默认不再执行。若你希望自定义验证始终运行(比如做兜底检查或日志记录),需设置:
'skipOnError' => false- 常与
skipOnEmpty => false配合使用,确保完全不跳过
反向操作:只对特定字段生效
如果你的模型有多个字段,但只想让某几条规则“忽略空值”,其余保持默认,就不用统一处理——只需在对应规则里单独加 skipOnEmpty => true(虽然这是默认值,显式写上更清晰)。真正需要显式设置的,反而是那些不能跳过的场景。
注意:这不是“排除字段”,而是“控制校验时机”
Yii2 没有类似 “忽略 user_id 字段所有验证” 的语法。所谓“忽略”,本质是让某条规则对空值或出错状态不做响应。若想彻底跳过某个字段的全部验证,应在调用 $model->validate() 前,手动从 $model->attributes 中 unset 它,或使用 scenarios 定义精简的验证场景。











