1. 程式人生 > >解決Yii自帶的驗證碼不隨頁面重新整理自動重新整理的問題

解決Yii自帶的驗證碼不隨頁面重新整理自動重新整理的問題

        如何新增驗證碼,這裡就不再多說了,網上有很多的資料。自己按照網上的資料搜尋新增即可,

驗證碼新增好之後,會發現,重新整理頁面Yii的驗證碼並不會自動重新整理,目前解決這個的辦法有三種:

一、修改原始碼CCaptchaAction.php的run方法,不推薦

二、寫一個js,在頁面重新整理的時候呼叫js自動點選驗證碼圖片實現重新整理,感覺有點...,太依賴js了不太好吧

三、在components資料夾下新建一個檔案Captcha.php

新增如下程式碼,重寫run方法:

class Captcha extends CCaptchaAction{
    //重寫run方法,使得驗證碼在頁面重新整理時重新整理
    public function run(){
        if (isset($_GET[self::REFRESH_GET_VAR])){
            $code = $this->getVerifyCode(true);
            echo CJSON::encode(array(
                'hash1' => $this->generateValidationHash($code),
                'hash2' => $this->generateValidationHash(strtolower($code)),
                'url' => $this->getController()->createUrl($this->getId(), array('v' => uniqid())),
            ));
        }else {
            $this->renderImage($this->getVerifyCode(true));
            Yii::app()->end();
        }    
    }
}

之後修改controller中class為captcha即可,程式碼如下

public function actions(){
        return array(
                'captcha'=>array(
                        'class'=>'Captcha',
                        'backColor'=>0xFFFFFF,
                        'maxLength'=>'4',       // 最多生成幾個字元
                        'minLength'=>'4',       // 最少生成幾個字元
                        'height'=>'40',
                        'width'=>'230',
                        'transparent'=>true,  //顯示為透明
                        'testLimit' => 0,  //限制相同驗證碼出現的次數,0為不限制
                ),
        );
    }

現在再去重新整理一下頁面試試看,驗證碼是不是隨頁面重新整理而重新整理了呢