【问题标题】:Yii's CCompareValidator doesn't workYii 的 CCompareValidator 不起作用
【发布时间】: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 设置为truefalse 的案例。没有效果。

标签: php yii validation


【解决方案1】:

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

  1. CCompareValidator,当两个比较值不相等时引发错误。另一方面,如果它们相等 - 它通过验证而没有错误。这是假定的行为。

  2. 我想要一个错误,当值相等时(这意味着用户正在尝试编辑他或她自己)并通过验证,当两个值不同时(记录的用户编辑不同的值)。

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

顺便说一句:解决这个问题的所有荣耀都归于Keith at YiiFramework.com's forum

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多