Cet article vous présente principalement la solution au problème de Yii qui saisit le code de vérification correct mais la vérification échoue. L'article le présente en détail à travers l'exemple de code, qui a une certaine valeur de référence et d'apprentissage pour tous les amis qui en ont besoin. il peut jeter un oeil ci-dessous.
Préface
Lorsque j'ai fait une demande récemment, j'ai constaté que j'avais entré le code de vérification correct, mais l'erreur de code de vérification s'est affichée.
Enfin, en traçant le code, nous avons constaté que si le modèle était vérifié séparément avant l'enregistrement, une fois la vérification terminée, le code de vérification sera régénéré
et ensuite lorsque nous Model save
, la validation sera également effectuée, le code de vérification a été régénéré, il ne correspondra donc pas à
// 如果这里用到了验证码,就会出问题 $model = new Test(); $model->validate(); $model->save();
// 这样是正确的 $model = new Test(); // 把需要验证的 attribute 放进去,排除验证码字段 $model->validate(array('test1','test2')); $model->save()
nous Vous pouvez voir framework/web/widgets/captcha/CCaptchaAction.php
et vous pouvez facilement trouver le problème
<?php class CaptchaAction extends CCaptchaAction { public function validate($input, $caseSensitive) { $code = $this->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; } }
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!