本文实例讲述了Yii使用Captcha验证码的方法。分享给大家供大家参考,具体如下:

详细代码可参考:yii自带的示例代码post项目,里面有一个contact表单用到了验证码.

1. Model:

将验证码加入UserLogin的一个属性:

class UserLogin extends CFormModel{ public $username; public $password; public $rememberMe; public $verifyCode; public function rules() {  return array(   // username and password are required   array("username, password,verifyCode", "required"),   // rememberMe needs to be a boolean   array("rememberMe", "boolean"),   // password needs to be authenticated   array("password", "authenticate"),   // verifyCode needs to be entered correctly   array("verifyCode", "captcha", "allowEmpty"=>!CCaptcha::checkRequirements()),  ); } /**  * Declares attribute labels.  */ public function attributeLabels() {  return array(   "rememberMe"=>Yii::t("user","Remember me next time"),   "username"=>Yii::t("user","username or email"),   "password"=>Yii::t("user","password"),   "verifyCode"=>Yii::t("user","Verification Code"),  ); }}

2. Controller

在LoginController控制器加入映射动作CCaptchaAction

public function actions(){ return array(  // captcha action renders the CAPTCHA image displayed on the contact page  "captcha"=>array(   "class"=>"CCaptchaAction",   "backColor"=>0xf4f4f4,   "padding"=>0,   "height"=>30,   "maxLength"=>4,  ),  );}ublic function actionLogin(){ if (Yii::app()->user->isGuest) {  $model=new UserLogin;  // collect user input data  if(isset($_POST["UserLogin"]))  {   $model->attributes=$_POST["UserLogin"];//在此核对验证码   if($this->createAction("captcha")->validate($model->verifyCode, false))   {    // validate user input and redirect to previous page if valid    if($model->validate()) {    //admin login only    if( Yii::app()->getModule("user")->isAdmin()==1 )    {    $this->lastViset();    if (strpos(Yii::app()->user->returnUrl,"/index.php")!==false)     $this->redirect(Yii::app()->controller->module->returnUrl);    else     $this->redirect(Yii::app()->user->returnUrl);    }else    {//if no admin when login out     $this->redirect(Yii::app()->controller->module->logoutUrl);    }   }   }else   {//提示错误    $model->addError("verifyCode","验证码不对");   }  }  // display the login form  $this->render("/user/login",array("model"=>$model)); } else  $this->redirect(Yii::app()->controller->module->returnUrl);}

在验证用户名密码前,检查验证码:

if($this->createAction("captcha")->validate($model->verifyCode, false)){

3. view

在视图中显示验证码图片,输入框

<?php $this->widget("CCaptcha"); ?>  <?php echo CHtml::activeTextField($model,"verifyCode",array("tabindex"=>1)); ?><img src="http://www.XXXX.net/uploads/123456.jpg" alt="">

希望本文所述对大家基于Yii框架的PHP程序设计有所帮助。