点击这里给我发消息 点击这里给我发消息

PHP开发框架Yii Framework教程(20) UI组件 Captcha示例

添加时间:2013-12-6
    相关阅读: 开发 程序 PHP 框架
 

Captcha(全自动区分计算机和人类的图灵测试-Completely Automated Public Turing test to tell Computers and Humans Apart,简称CAPTCHA)俗称验证码,是一种区分用户是计算机和人的公共全自动程序。在CAPTCHA测试中,作为服务器的 计算机会自动生成一个问题由用户来解答。这个问题可以由计算机生成并评判,但是必须只有人类才能解答。由于计算机无法解 答CAPTCHA的问题,所以回答出问题的用户就可以被认为是人类。

Yii Framework提供了类CCaptcha和CCaptchaAction用 于支持验证码,要注意的是这个功能需要有PHP GD扩展支持,可以通过Yii的Requirements应用来查询:

如果显示Warning,可以通过安装GD扩展库,并修改PHP.ini打开该功能。

CCaptcha也提供方法 CCaptcha::checkRequirements() 来检测GD库是否安装。

本例通过修改Yii Framework 开发教程(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组件了:

<center 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') ?>

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

咨询热线:020-85648757 85648755 85648616 0755-27912581 客服:020-85648756 0755-27912581 业务传真:020-32579052
广州市网景网络科技有限公司 Copyright◎2003-2008 Veelink.com. All Rights Reserved.
广州商务地址:广东省广州市黄埔大道中203号(海景园区)海景花园C栋501室
= 深圳商务地址:深圳市宝源路华丰宝源大厦606
研发中心:广东广州市天河软件园海景园区 粤ICP备05103322号 工商注册