本文实例讲述了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 dataif(isset($_POST["UserLogin"])){ $model->attributes=$_POST["UserLogin"];//在此核对验证码 if($this->createAction("captcha")->validate($model->verifyCode, false)) {// validate user input and redirect to previous page if validif($model->validate()) {//admin login onlyif( 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程序设计有所帮助。