Yii框架是一款轻量级PHP框架,拥有极好的扩展性、安全性和高效性。Yii框架中自带了验证码生成功能,但是在实际开发中每个页面可能需要多个验证码,该如何实现呢?本篇文章就将介绍如何在Yii1.0中实现不同页面多个验证码的使用。
1. 概述
Yii框架的验证码由CaptchaAction类实现。每个使用验证码的页面都必须要有一个CaptchaAction类。
2. 实现方法
2.1. 在控制器中添加CaptchaAction类
在需要使用验证码的控制器中,添加以下代码:
public function actions()
{
return array(
'captcha1'=>array(
'class'=>'CCaptchaAction',
'backColor'=>0xFFFFFF,
),
'captcha2'=>array(
'class'=>'CCaptchaAction',
'backColor'=>0xFFFFFF,
),
);
}
在该代码中,我们定义了两个CaptchaAction类:captcha1和captcha2。每一个类都可以接收backColor参数,该参数可以设置验证码的背景颜色。
2.2. 在视图中添加验证码
在视图文件中,我们可以使用以下代码输出验证码:
widget('CCaptcha'); ?>
该代码将会输出默认值对应的CaptchaAction类。
如果我们想要使用我们在控制器中自定义的CaptchaAction类,我们可以使用以下代码:
widget('CCaptcha', array('captchaAction'=>'captcha1')); ?>
该代码将会使用我们定义的名为captcha1的CaptchaAction类。
2.3. 在表单中添加验证码校验
在需要对验证码进行校验的表单中,我们需要添加以下代码:
labelEx($model,'verifyCode'); ?>
widget('CCaptcha', array('captchaAction'=>'captcha1')); ?>
textField($model,'verifyCode'); ?>
以上代码将会在表单中添加一个验证码输入框,并且会在该输入框旁边打印出需要校验的验证码图片。
2.4. 验证码校验
在我们需要进行验证码校验的控制器中,我们可以使用下面的代码进行校验:
if(Yii::app()->controller->module->scenario!=''){
$this->checkCode(strtolower(trim($_POST[Yii::app()->controller->module->scenario.'_verifyCode'])));
}
该代码使用了checkCode方法,以下是该方法的代码实现:
public function checkCode($input)
{
if(!CCaptcha::validate($input))
{
$this->showError(101);
}
}
使用以上代码,我们必须在控制器中的每个需要校验验证码的方法前面添加checkCode方法即可。
3. 总结
通过以上的方法,我们就可以在Yii1.0框架中实现不同页面多个验证码的使用了。将每个需要用到验证码的页面放在控制器中,使用CaptchaAction类,我们可以自由地定义验证码的数量和样式。使用以上方法,我们可以在表单中添加验
证码校验,提高页面的安全性。