在做一個需求時,發現輸入正確驗證碼,但是都提示驗證碼錯誤
最後追蹤代碼發現,如果 Model 在 save 前,單獨做了 validate 驗證,則在驗證結束後,會重建驗證碼
然後在我們 Model save 時,也會進行 validate 驗證,驗證時,驗證碼已經重建了,所以會匹配不上
// 如果這裡用到了驗證碼,就會出問題$model = new Test();$model->validate();$model->save();
// 這樣是正確的$model = new Test();// 把需要驗證的 attribute 放進去,排除驗證碼欄位$model->validate(array('test1','test2'));$model->save()
我們可以看framework/web/widgets/captcha/CCaptchaAction.php 可以很容易就發現問題了
getVerifyCode(); $valid = $caseSensitive ? ($input === $code) : !strcasecmp($input, $code); $session = Yii::app()->session; $session->open(); $name = $this->getSessionKey() . 'count'; if (!Yii::app()->request->isAjaxRequest) { $session[$name] = $session[$name] + 1; } // 這裡會重建 if ($session[$name] > $this->testLimit && $this->testLimit > 0) { $this->getVerifyCode(true); } return $valid; }}
以上就介紹瞭解決Yii 輸入正確驗證碼驗證失敗,包括了方面的內容,希望對PHP教程有興趣的朋友有所協助。