Php Yii';公司验证人不';行不通
要么我不明白Yii(原文如此!)是如何工作的,要么它根本不适合我 我想检查正在更新的行/记录/用户的ID是否与当前登录用户的ID不相同。并禁止更新,如果是 起初我使用了Php Yii';公司验证人不';行不通,php,yii,validation,Php,Yii,Validation,要么我不明白Yii(原文如此!)是如何工作的,要么它根本不适合我 我想检查正在更新的行/记录/用户的ID是否与当前登录用户的ID不相同。并禁止更新,如果是 起初我使用了CCompareValidator: array('id', 'compare', 'compareValue'=>Yii::app()->user->id, 'message'=>'Boom!') 它不起作用——它会停止编辑/更新每一行/记录/用户,不管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的内置验证器在这么简单的例子中失败了,而我自己却能正常工作?验证器正常工作,我的逻辑失败了:
CCompareValidator
抛出错误。另一方面,如果它们相等,那么它通过了验证,没有错误。这是假定的行为'operator'=>'!='代码>作为验证程序的配置。这就是答案
顺便说一句:解决这个问题的所有好处都在于。您是否将skipOnError
设置为false?默认设置为false
。此外,它与这个问题无关——它处理的是存在多个验证错误的情况,在这种情况下,这是第一个也是唯一的验证错误。为了确保这一点,我将skipOnError
设置为true
和false
来测试这个案例。没有效果。