关于验证码的补充教程 [ 新手入门 ]
舰长版:http://www.yiichina.com/topic/22 下面是舰长升级版~~呵呵 通过舰长的方法,我们可以设定验证码图片的一些属性...具体可以参看api手册system.web.widgets.captcha下的CCaptchaAction这个类.其中有很多属性,可以通过在控制器的 public actions 中 返回数组来设定.
当我们看api的system.web.widgets.captcha包时,我们会发现还有一个CCaptcha类.其中也提供了我们一些可配置的内容.例如:点击图片刷新验证码.下面就以此为例具体讲解其使用方法. 首先,我们在protected\components下建立一个类文件,主要用于继承CCaptcha类,通过覆盖属性,达到我们预期的目的.
class XXXCCaptcha extends CCaptcha //注意类名与文件名相同
{
public $clickableImage = true; //此属性为true时,点击图片可以刷新验证码.
public $showRefreshButton = false; //此属性基类中默认是true, 我们通过修改它可以使刷新验证的的链接不显示出来.
}
以上方法提供了一个继承类的思路,另外还可以从view文件直接传入属性的方法,见 http://www.yiichina.com/topic/123 [attach]28[/attach] [attach]27[/attach] 大家会看到图片字符的长度不一样了,这是因为后者按照舰长的设置,定义了4个长度的字符. 还有"验证码"的中文,是在相应的view文件中.修改实现的 在需要的安放验证码的地方(view的某处).写入下列代码
<?php if(CCaptcha::checkRequirements()): ?>//检验服务器PHP中 GD和FreeType是否启用 如果想使用中文验证码,可能要修改此处的验证吧....当然服务器也要提供相应的中文字库
<div class="row">
<?php echo $form->labelEx($model,'验证码'); ?> //此处是标签文字,默认是英文,如果改成中文,请把文件的编码方式 ANSI 改成UTF8这样就可以正常显示中文,而不出现乱码了. 当然也可以使用Yii提供的本地化功能.
<div>
<?php
$this->widget('XXXCCaptcha'); //这里调用的是我们先前创建的CCaptcha的子类.这样才能达到预期目标
?>
<?php echo $form->textField($model,'verifyCode'); ?> //这里注意,在对应的表单模型类中,要定义public $verifyCode 变量,不然会因为寻找不到变量而报错.
</div>
<?php endif; ?>[/code]这样修改后,虽然可以显示验证码,但实际上可以为空.
因此还要在表单模型类中,添加rule:[code]// verifyCode needs to be entered correctly //验证码需要正确输入
array('verifyCode', 'captcha', 'allowEmpty'=>!CCaptcha::checkRequirements()) // 此处调用captcha验证器进行验证. allowEmpty的情况是验证码相关控件不能正确载入.
共 15 条回复
-
不过为了方便起见,还是不要继承了,直接在widget初始化的时候指定属性的值也是可以的。
我们可以在view文件里这样使用:
<?php if(extension_loaded('gd')): ?> <div class="row"> <?php echo $form->labelEx($model,'verifyCode'); ?> <div> <?php $this->widget('CCaptcha',array('clickableImage'=>true,'showRefreshButton'=>false)); ?> <?php echo $form->textField($model,'verifyCode'); ?> </div> <div class="hint">Please enter the letters as they are shown in the image above. <br/>Letters are not case-sensitive.</div> </div> <?php endif; ?>
-
menghuangxiao 回复于 2012-10-11 10:55 举报
赞一个!
圆般
注册时间:2011-03-09
最后登录:1970-01-01
在线时长:0小时0分
最后登录:1970-01-01
在线时长:0小时0分
- 粉丝3
- 金钱590
- 威望0
- 积分590