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
相关产品推荐
相关产品推荐

