本文實(shí)例講述了Yii使用Captcha驗(yàn)證碼的方法。分享給大家供大家參考,具體如下:
詳細(xì)代碼可參考:yii自帶的示例代碼post項(xiàng)目,里面有一個contact表單用到了驗(yàn)證碼.
1. Model:
將驗(yàn)證碼加入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' ]; //在此核對驗(yàn)證碼 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' , '驗(yàn)證碼不對' ); } } // display the login form $this ->render( '/user/login' , array ( 'model' => $model )); } else $this ->redirect(Yii::app()->controller->module->returnUrl); } |
在驗(yàn)證用戶名密碼前,檢查驗(yàn)證碼:
1
2
|
if ( $this ->createAction( 'captcha' )->validate( $model ->verifyCode, false)) { |
3. view
在視圖中顯示驗(yàn)證碼圖片,輸入框
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程序設(shè)計(jì)有所幫助。