要麼我不明白CCompareValidator如何在Yii中工作(原文如此!)或者它根本不適用於我。Yii的CCompareValidator不起作用
我想檢查一下,如果正在更新的行/記錄/用戶的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的內置驗證器在這個簡單的例子中失敗,而我自己的作品呢?
你設置'skipOnError'爲false嗎? –
['skipOnError'](http://www.yiiframework.com/doc/api/1.1/CValidator#skipOnError-detail)默認設置爲'false'。除此之外,它與這個問題無關 - 它處理的情況有多個驗證錯誤,在這種情況下,這是第一個也是唯一的驗證錯誤。爲了讓自己確信,我用'skipOnError'設置爲'true'和'false'來測試案例。沒有效果。 – trejder