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

Yii2 when条件验证失效:非transaction控制器仍触发deposit验证

问题解决办法

问题原因

你的when回调函数存在逻辑漏洞:仅在满足条件时返回true,但不满足条件时没有明确返回false。Yii框架中,when回调如果返回null(即无返回值),会被默认视为true,这就导致非transaction控制器下该验证规则依然生效。

修复方案

修改when回调,确保所有分支都返回明确的布尔值:

['deposit', 'required', 'on' => 'sell',
    'message' => 'Deposit cannot be blank',
    'when' => function () {
        // 明确返回布尔值,满足条件返回true,否则返回false
        return Yii::$app->controller->id === 'transaction' && $this->deposite_date !== null;
    }
]

额外检查点

  • 确认非transaction控制器中,是否误将模型的场景设置为sell。如果不需要在这些控制器中启用sell场景,确保代码中没有执行$model->scenario = 'sell';这类操作。
  • 注意字段名拼写:你的代码中使用了deposite_date,确认数据库和模型中该字段的实际名称是否正确(常见正确拼写为deposit_date),避免因字段名错误导致判断逻辑失效。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 22:42:37