圆般 2011-03-26 13:22:48 7222次浏览 15条回复 3 0 0

舰长版: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的情况是验证码相关控件不能正确载入.
您需要登录后才可以回复。登录 | 立即注册