Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cassandra/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Yii';公司验证人不';行不通_Php_Yii_Validation - Fatal编程技术网

Php Yii';公司验证人不';行不通

Php Yii';公司验证人不';行不通,php,yii,validation,Php,Yii,Validation,要么我不明白Yii(原文如此!)是如何工作的,要么它根本不适合我 我想检查正在更新的行/记录/用户的ID是否与当前登录用户的ID不相同。并禁止更新,如果是 起初我使用了CCompareValidator: array('id', 'compare', 'compareValue'=>Yii::app()->user->id, 'message'=>'Boom!') 它不起作用——它会停止编辑/更新每一行/记录/用户,不管ID实际上是什么 因此,我将其改写为我自己的自定义

要么我不明白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的内置验证器在这么简单的例子中失败了,而我自己却能正常工作?

验证器正常工作,我的逻辑失败了:

  • 当两个比较值不相等时,
    CCompareValidator
    抛出错误。另一方面,如果它们相等,那么它通过了验证,没有错误。这是假定的行为

  • 我想要一个错误,当值相等时(这意味着用户试图编辑自己),当两个值不同时(记录的用户编辑不同的值),作为验证通过

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


    顺便说一句:解决这个问题的所有好处都在于。

    您是否将
    skipOnError
    设置为false?默认设置为
    false
    。此外,它与这个问题无关——它处理的是存在多个验证错误的情况,在这种情况下,这是第一个也是唯一的验证错误。为了确保这一点,我将
    skipOnError
    设置为
    true
    false
    来测试这个案例。没有效果。