Yii的CCompareValidator不起作用

时间:2014-03-31 09:27:13

标签: php yii validation

要么我不明白CCompareValidator在Yii中的作用(原文如此!),要么根本不适合我。

我想检查,如果正在更新的行/记录/用户的ID与当前登录用户的ID不同。并禁止更新,如果是。

我最初使用CCompareValidator

array('id', 'compare', 'compareValue'=>Yii::app()->user->id, 'message'=>'Boom!')

它不起作用 - 它停止编辑/更新每一行/记录/用户,无论身份证实际是什么。

所以,我把它改写成了我自己的自定义验证器。在我看来,代码与内置代码相同:

array('id', 'compareId', 'compareValue'=>Yii::app()->user->id, 'message'=>'Boom!')

public function compareId($attribute = null, $params = null)
{
    if($attribute === 'id')
    {
        if($this->id == $params['compareValue'])
        {
            $this->addError($params['message']);
        }
    }
}

它像魅力一样 - 允许更新任何行/记录/用户,该ID与当前登录用户的ID不同。阻止更新,显示已定义的消息,以防比较ID相等。

我错过了什么?为什么原来Yii的内置验证器在这样一个简单的例子中失败了,而我自己的作品呢?

1 个答案:

答案 0 :(得分:1)

验证器工作,假设我的逻辑失败了:

  1. CCompareValidator,当两个比较值不相等时会抛出错误。另一方面,如果它们相等 - 它会通过验证而不会出错。这是假定的行为。

  2. 我想要一个错误,当值相等时(这意味着,该用户正在尝试编辑自己)并且当两个值不同时(记录的用户编辑不同的一个),验证时传递。

  3. 这就是为什么我需要使用'operator'=>'!='作为验证器的配置。这就是答案。

    顺便说一句:解决这个问题的所有荣耀归于Keith at YiiFramework.com's forum