鍍金池/ 教程/ PHP/ Yii Framework 開發(fā)教程(20) UI 組件 Captcha 示例
Yii Framework 開發(fā)教程(16) UI 組件 StarRating 示例
Yii Framework 開發(fā)教程(2) Yii Web 應(yīng)用基礎(chǔ)
Yii Framework 開發(fā)教程(19) UI 組件 TreeView 示例
Yii Framework 開發(fā)教程(39) Zii 組件-Slider 示例
Yii Framework 開發(fā)教程(45) Zii 組件-Selectable 示例
Yii Framework 開發(fā)教程(44) Zii 組件-Resizable 示例
Yii Framework 開發(fā)教程(8) 使用 FormModel
Yii Framework 開發(fā)教程(42) Zii 組件-Draggable 示例
Yii Framework 開發(fā)教程(18) UI 組件 TextHighlighter 示例
Yii Framework 開發(fā)教程(32) Zii 組件-GridView 示例
Yii Framework 開發(fā)教程(30) Zii 組件-ListView 示例
Yii Framework 開發(fā)教程(9) UI 組件 Widget 概述
Yii Framework 開發(fā)教程(17) UI 組件 TabView 示例
Yii Framework 開發(fā)教程(24) 數(shù)據(jù)庫-DAO 示例
Yii Framework 開發(fā)教程(25) 數(shù)據(jù)庫-Query Builder 示例
Yii Framework 開發(fā)教程(21) UI 組件 自定義 Captcha 示例
Yii Framework 開發(fā)教程(38) Zii 組件-ProgressBar 示例
Yii Framework 開發(fā)教程(20) UI 組件 Captcha 示例
Yii Framework 開發(fā)教程(14) UI 組件 MaskedTextField 示例
Yii Framework 開發(fā)教程(22) UI 組件 Zii 組件簡介
Yii Framework 開發(fā)教程(31) Zii 組件-DetailView 示例
Yii Framework 開發(fā)教程(33) Zii 組件-Accordion 示例
Yii Framework 開發(fā)教程(36) Zii 組件-DatePicker 示例
Yii Framework 開發(fā)教程(6) CComponent 組件
Yii Framework 開發(fā)教程(37) Zii 組件-Dialog 示例
Yii Framework 開發(fā)教程(26) 數(shù)據(jù)庫-Active Record 示例
Yii Framework 開發(fā)教程(29) Zii組件-Menu 示例
Yii Framework 開發(fā)教程(46) Zii 組件-Sortable 示例
Yii Framework 開發(fā)教程(10) UI 組件 自定義組件
Yii Framework 開發(fā)教程(11) UI 組件 ActiveForm 示例
Yii Framework 開發(fā)教程(43) Zii 組件-Droppable 示例
Yii Framework 開發(fā)教程(27) 數(shù)據(jù)庫-關(guān)聯(lián) Active Record 示例
Yii Framework 開發(fā)教程(47) 主題 Theme 示例
Yii Framework 開發(fā)教程(48) 多國語言示例
Yii Framework 開發(fā)教程(35) Zii 組件-Button 示例
Yii Framework 開發(fā)教程(3) 為應(yīng)用添加日志
Yii Framework 開發(fā)教程(23) 數(shù)據(jù)庫-概述
Yii Framework 開發(fā)教程(12) UI 組件 ClipWidget 示例
Yii Framework 開發(fā)教程(41) Zii 組件-Tabs 示例
Yii Framework 開發(fā)教程(34) Zii 組件-AutoComplete 示例
Yii Framework 開發(fā)教程(40) Zii 組件-SliderInput 示例
Yii Framework 開發(fā)教程(5) URL 管理
Yii Framework 開發(fā)教程(4) Hangman 猜單詞游戲?qū)嵗?/span>
Yii Framework 開發(fā)教程(15) UI 組件 MultiFileUpload 示例
Yii Framework 開發(fā)教程(7) 使用 CHtml 創(chuàng)建 Form
Yii Framework 開發(fā)教程(28) Data Provider 簡介
Yii Framework 開發(fā)教程(1) 第一個應(yīng)用 Hello World
Yii Framework 開發(fā)教程(13) UI 組件 ContentDecorator 示例

Yii Framework 開發(fā)教程(20) UI 組件 Captcha 示例

Captcha(全自動區(qū)分計算機和人類的圖靈測試-Completely Automated Public Turing test to tell Computers and Humans Apart,簡稱 CAPTCHA)俗稱驗證碼,是一種區(qū)分用戶是計算機的公共全自動程序。在 CAPTCHA 測試中,作為服務(wù)器的計算機會自動生成一個問題由用戶來解答。這個問題可以由計算機生成并評判,但是必須只有人類才能解答。由于計算機無法解答 CAPTCHA 的問題,所以回答出問題的用戶就可以被認(rèn)為是人類。

Yii Framework 提供了類 CCaptcha 和 CCaptchaAction 用于支持驗證碼,要注意的是這個功能需要有 PHP GD 擴展支持,可以通過 Yii 的 Requirements 應(yīng)用來查詢:

http://wiki.jikexueyuan.com/project/yii-development-tutorial/images/20.1.jpg" alt="picture20.1" />

如果顯示 Warning,可以通過安裝 GD 擴展庫,并修改 PHP.ini 打開該功能。

CCaptcha 也提供方法 CCaptcha::checkRequirements() 來檢測 GD 庫是否安裝。

本例通過修改 Yii Framework 開發(fā)教程(16) UI 組件 StarRating示例 為其添加 Captcha 功能,只有輸入的驗證碼正確時,用戶評分才有效,避免機器自動評分。

首先是修改 DataModel,添加一個屬性 verifyCode 用來存放用戶輸入的驗證碼,并給其添加 CCaptchaValidator 驗證。


    class DataModel extends CFormModel
    {
        public $rating;
        public $verifyCode;

        public function rules()
        {

            return array(
                array('rating,verifyCode',  'safe'),
                array('verifyCode','captcha',
                        'allowEmpty'=>!CCaptcha::checkRequirements()),
            );

        }
    }

然后修改 SiteController,添加 actions 方法,Captcha 組件缺省使用 CCaptchaAction,其缺省 ID 為 captcha。


    public function actions()
    {
        return array(
            'captcha'=>array(
                    'class' => 'CCaptchaAction',
            ));
    }

下面就可以在 View 中添加 Captcha 組件了:


    <div class="form">
    <?php $form=$this->beginWidget('CActiveForm'); ?>

    <?php echo $form->errorSummary($model); ?>

    <?php if(CCaptcha::checkRequirements()): ?>
    <?php $this->widget('CStarRating',array(
        'model'=>$model,
        'attribute'=>'rating',
        'name'=>'rating',
        'value'=>3,
    )); ?>

    <p />
       <?php  echo $form->label($model,'verifyCode') ?>
       <p />
       <?php $this->widget('CCaptcha'); ?>
       <p />
       <?php  echo $form->textField($model,'verifyCode') ?>

    <div class="row submit">
    <?php echo CHtml::submitButton('Submit'); ?>
    </div>
     <?php endif ?>
    <?php $this->endWidget(); ?>
    </div><!-- form -->

http://wiki.jikexueyuan.com/project/yii-development-tutorial/images/20.2.jpg" alt="picture20.2" />

本例下載