利用Zend_Form_Element_Captcha 实现登录验证的验证码功能
2015-03-27 18:47
911 查看
搞了一下午,终于搞出来了,网上有好多都是利用了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')),
));
}
}
继承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')),
));
}
}
相关文章推荐
- vue+element-ui集成随机验证码+用户名+密码的form表单验证功能
- Servlet结合Html实现登录验证(包括验证码验证)功能
- JavaWeb学习记录(六)——用户登录功能之Session与验证码验证功能的实现
- c#实现验证码功能(多种模式下分别实现验证功能)详细,带注释
- 用struts拦截器实现登录验证功能AuthorizationInterceptor
- 利用AppInventor实现登录功能(完整版)
- Yii框架实现的验证码、登录及退出功能示例
- 利用PHP绘图函数实现简单验证码功能的方法
- 如何在异步提交form的时候利用jQuery validate实现表单验证
- 第三百三十五节,web爬虫讲解2—Scrapy框架爬虫—豆瓣登录与利用打码接口实现自动识别验证码
- shiro框架---关于用户登录和权限验证功能的实现步骤(二)
- 利用ASIHttpRequest实现一个简单的登录验证
- Spring Boot + Spring Cloud 实现权限管理系统 后端篇(十七):登录验证码实现(Captcha)
- 利用html5的本地存储功能实现登录用户信息保存
- c#实现验证码功能(多种模式下分别实现验证功能)详细,带注释
- 利用信鸽推送实现Android登录后强制退出的功能(单点登录)
- 防机器登录验证码的实现 与 输入匹配验证
- 【学习笔记⑦】登录页面怎样实现验证码登录功能
- Android基础学习总结(十二)——利用Bmob实现用户账户体系(注册、登录、验证等)
- 利用axure做原型图——登录界面验证码的实现