本文实例讲述了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程序设计有所帮助。