【发布时间】:2014-03-31 09:27:12
【问题描述】:
要么我不明白 CCompareValidator 在 Yii 中的工作原理(原文如此!),要么它根本不适合我。
我想检查正在更新的行/记录/用户的 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 的内置验证器在这样简单的示例上失败,而我自己的工作?
【问题讨论】:
-
你设置
skipOnErrorfalse吗? -
skipOnError默认设置为false。此外,它与这个问题无关——它处理存在多个验证错误的情况,在这种情况下,这是第一个也是唯一的验证错误。为了确保自己,我测试了将skipOnError设置为true和false的案例。没有效果。
标签: php yii validation