您的位置:首页 > 编程语言 > PHP开发

利用Zend_Form_Element_Captcha 实现登录验证的验证码功能

newbird105 2015-03-27 18:47 92 查看
搞了一下午,终于搞出来了,网上有好多都是利用了Zend_Captcha_Image 这个类去实现的,我所需要的是在form表格里实现,刚好有这个Zend_Form_Element_Captcha 元素,所以就利用了一下,网上的说明资料很少,只能看英文的自己调试,具体代码如下:

继承zend_form类,实现一个自己的登录框:

<?php

class LoginForm extends Zend_Form

{

public function __construct($options=null)

{

parent::__construct($options);

$this->setName('login');

$username = new Zend_Form_Element_Text('username');

$username->setLabel('UserName')->setRequired(true)->

addFilter('StripTags')->addFilter('StringTrim')->addValidator('NotEmpty');

$passwd = new Zend_Form_Element_Password('passwd');

$passwd->setLabel('PassWord')->setRequired(true)->addFilter('StripTags')

->addFilter('StringTrim')->addValidator('NotEmpty');

$login = new Zend_Form_Element_Submit('login');

$login->setAttrib('id','login');

$reset = new Zend_Form_Element_Reset('reset');

$reset->setAttrib('id', 'reset');

$captcha = new Zend_Form_Element_Captcha('captcha',array('captcha'=>array('captcha'=>'Image', // 重点就是从这个地方开始的

'wordlen'=>4,
// 验证码上的数字的个数,这个是设置为4个

'timeout'=>50, // 未知。。

'width'=>200, // 图片验证码的宽度

'height'=>100, // 图片验证码的高度

'lineNoiseLevel'=>0, // 这个是验证码上的干扰线的程度,这里为0,设置为没有干扰线

'gcFreq'=>50, // 这个据说是用来自动删除生成在服务端的验证码的图片的,因为每刷新一次,就需要生成一个图片,生成的图片太多了会占用很多资源

'imgUrl'=>"http://localhost/library/application/images/captcha", // 重点来了,这个地址是用来访问生成的图片的URL,因为第一次没有设置这个属性,导致验证
码图片在网页上无法显示,始终显示是一个红叉

'imgDir'=>'../application/images/captcha', //这个文件夹里是存放自动生成的验证码图片 要自己去工程目录下创建

'font'=>'../application/fonts/arial.ttf',
//这个属性是用来设置图片上的验证码的字体的,必须要有,也是要自己创建一个目录,并将字体拷贝进去

)));

$this->addElements(array($username,$passwd,$login,$reset,$captcha)); // 用表格的对象将这些元素都添加进去,就可以实现了

/*$this->setElementDecorators(array( //这里添加了一些装饰器,但是对装饰器不了解,用了之后,元素排版出现问题,验证码功能不能正常使
用,就屏蔽掉了这段代码

array('ViewHelper'),

array('Errors'),

array('Description'),

array('Label', array('separator'=>' ')),

array('HtmlTag', array('tag' => 'ul')),

));*/

//按钮使用装饰器进行排版是可以的。

$login->setDecorators(array(

array('ViewHelper'),

array('Description'),

array('HtmlTag', array('tag' => 'tr', 'class'=>'submit-group')),

));

$reset->setDecorators(array(

array('ViewHelper'),

array('Description'),

array('HtmlTag', array('tag' => 'tr', 'class'=>'submit-group')),

));

}

}
标签: 
相关文章推荐