如何修改Yii2 exist验证规则,既校验Employee表ID又允许值为0
Yii2 允许manager_id=0通过exist验证的实现方案
核心改动
给现有exist验证规则新增内置的when条件判断,仅当manager_id不等于0时才执行Employee表的存在性校验,等于0时直接跳过该验证,判定为合法值。
修改后的完整验证规则
[ ['manager_id'], 'exist', 'skipOnError' => false, 'targetClass' => Employee::className(), 'targetAttribute' => ['manager_id' => 'id'], 'when' => function ($model) { return (int)$model->manager_id !== 0; }, ]
关键逻辑说明
when是Yii2所有验证器通用的内置属性,回调返回true时才会执行当前验证逻辑,返回false则直接跳过该规则- 强制将
manager_id转为整型再判断,可避免字符串'0'、空值这类边界场景的判断错误 - 原有配置
skipOnError => false保持不变,不影响非0值的错误提示逻辑
如果后续需要添加更多合法例外值,可修改when回调的判断逻辑,例如允许0和空值两种例外:
'when' => function ($model) { return !in_array($model->manager_id, [0, null], true); },
内容的提问来源于stack exchange,提问作者Toms Eglite
相关产品推荐
相关产品推荐

