本文实例讲述了Yii使用Captcha验证码的方法。分享给大家供大家参考,具体如下:
详细代码可参考:yii自带的示例代码post项目,里面有一个contact表单用到了验证码.
1. Model:
将验证码加入UserLogin的一个属性:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
|
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
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
|
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); } |
在验证用户名密码前,检查验证码:
1
2
|
if ( $this ->createAction( 'captcha' )->validate( $model ->verifyCode, false)) { |
3. view
在视图中显示验证码图片,输入框
1
2
3
|
<?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程序设计有所帮助。