-
- 公司需求,后台登陆加上验证码,以前做过Yii框架的后台登陆验证码,
- 想想挺简单的,应该不用花费很多时间。 于是就开始动手做,控制器先引入验证码类,
-
- public function actions()
- {
- return array(
- // captcha action renders the CAPTCHA image displayed on the contact page
- 'captcha'=>array(
- 'class'=>'CCaptchaAction',
- 'backColor'=>0xf4f4f4,
- 'padding'=>0,
- 'maxLength'=>4,
- 'mixLength'=>4,
- ),
- );
- }
-
- 模型定义好相关的属性
- class LoginForm extends CFormModel
{
public $username;
public $password;
public $rememberMe;
public $verifyCode;
private $_identity;
-
- Yii有自己的验证码验证规则
- public function rules()
{
return array(
// username and password are required
array('username, password', 'required'),
// rememberMe needs to be a boolean
array('rememberMe', 'boolean'),
// password needs to be authenticated
array('password', 'authenticate'),
//验证码校验
array('verifyCode','captcha','message'=>'验证码不正确'),
);
}
- 属性备注中文名称
- public function attributeLabels()
{
return array(
'username'=>'帐号',
'password'=>'密码',
'rememberMe'=>'下次记住',
'verifyCode'=>'验证码:',
);
}
-
- 视图层
- <?php echo $form -> textFieldRow($model,'verifyCode',array('size'=>10,'class'=>'inputBg','maxLength'=>4)); ?>
- <?php
$this->widget('CCaptcha',array(
'showRefreshButton'=>false,
'clickableImage'=>true,
'imageOptions'=>array(
'alt'=>'点击换图',
'title'=>'点击换图',
'style'=>'cursor:pointer')));
?> - 大功告成,打算收工时,进入登陆页面发现验证码竟然没有显示出来,
- 然后就自己各种调试,还是没有解决问题。
- 当下立马下了1个1.6的Yii框架,本地架设试了一下,
- 验证码没有问题,
- 说明不是基本代码问题,
- 想想看看源代码,大致看了一下也没什么问题。
- 突然想起以前纯原生PHP代码做验证码时记得,
- 视图层<?php之前是不能有任何输出的,不然会导致生成图像不成功。
- 打印了一下输出
- 不是空格但是就是暂用了位置,还有字节数.
- 解决这种问题有两个方法
- 一个是在生成验证码图之前条用ob_clean()方法。
- 还有一个就是找到这个 删除掉.就能解决问题
-
包括BOM:
不要添加BOM(识别标记,UTF8签名),
下面的情况下,会在每个UTF8文件前增加额外的输出内容(我们是看不到,不可见字符)
-
-