要么我不明白CCompareValidator如何在Yii中工作(原文如此!)或者它根本不适用于我。Yii的CCompareValidator不起作用
我想检查一下,如果正在更新的行/记录/用户的ID与当前登录用户的ID不一样。如果是,则禁止更新。
我在第一次使用CCompareValidator
:
array('id', 'compare', 'compareValue'=>Yii::app()->user->id, 'message'=>'Boom!')
它不工作 - 它会暂停所有的行/记录/用户,不管什么一个ID其实就是编辑/更新。
因此,我将它重写为我自己的自定义验证程序。在我看来,该代码是相同的情况下,内置一个:
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的内置验证器在这个简单的例子中失败,而我自己的作品呢?
你设置'skipOnError'为false吗? –
['skipOnError'](http://www.yiiframework.com/doc/api/1.1/CValidator#skipOnError-detail)默认设置为'false'。除此之外,它与这个问题无关 - 它处理的情况有多个验证错误,在这种情况下,这是第一个也是唯一的验证错误。为了让自己确信,我用'skipOnError'设置为'true'和'false'来测试案例。没有效果。 – trejder