yii輸入正確驗(yàn)證碼提示錯(cuò)誤

yii輸入正確驗(yàn)證碼提示錯(cuò)誤

在做一個(gè)需求時(shí),發(fā)現(xiàn)輸入正確驗(yàn)證碼,但是都提示驗(yàn)證碼錯(cuò)誤。

最后追蹤代碼發(fā)現(xiàn),如果 Model 在?save?前,單獨(dú)做了?validate?驗(yàn)證,則在驗(yàn)證結(jié)束后,會(huì)重新生成驗(yàn)證碼。然后在我們 Model?save?時(shí),也會(huì)進(jìn)行?validate?驗(yàn)證,驗(yàn)證時(shí),驗(yàn)證碼已經(jīng)重新生成了,所以會(huì)匹配不上。

問題發(fā)現(xiàn):

我們可以看framework/web/widgets/captcha/CCaptchaAction.php可以很容易就發(fā)現(xiàn)問題了。

<?php class CaptchaAction extends CCaptchaAction{     public function validate($input, $caseSensitive)     {         $code = $this->getVerifyCode(); ????????$valid?=?$caseSensitive???($input?===?$code)?:?!strcasecmp($input,?$code); ????????$session?=?Yii::app()-&gt;session; ????????$session-&gt;open(); ????????$name?=?$this-&gt;getSessionKey()?.?'count';???????? ????????if?(!Yii::app()-&gt;request-&gt;isAjaxRequest)?{ ????????????$session[$name]?=?$session[$name]?+?1; ????????}???????? ????????//?這里會(huì)重新生成 ????????if?($session[$name]?&gt;?$this-&gt;testLimit?&amp;&amp;?$this-&gt;testLimit?&gt;?0)?{ ????????????????????$this-&gt;getVerifyCode(true); ????????} ????????????????return?$valid; ????} }
//?如果這里用到了驗(yàn)證碼,就會(huì)出問題$model?=?new?Test();  $model-&gt;validate();  $model-&gt;save();
//?這樣是正確的$model?=?new??Test(); //?把需要驗(yàn)證的?Attribute?放進(jìn)去,排除驗(yàn)證碼字段 $model-&gt;validate(array('test1','test2')); $model-&gt;save()

相關(guān)文章教程推薦:yii教程

? 版權(quán)聲明
THE END
喜歡就支持一下吧
點(diǎn)贊12 分享