要么我不明白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的内置验证器在这样一个简单的例子中失败了,而我自己的作品呢?
答案 0 :(得分:1)
验证器工作,假设我的逻辑失败了:
CCompareValidator
,当两个比较值不相等时会抛出错误。另一方面,如果它们相等 - 它会通过验证而不会出错。这是假定的行为。
我想要一个错误,当值相等时(这意味着,该用户正在尝试编辑自己)并且当两个值不同时(记录的用户编辑不同的一个),验证时传递。
这就是为什么我需要使用'operator'=>'!='
作为验证器的配置。这就是答案。