关于Yii 验证码(captcha)的一些…
2017-10-10 16:51
204 查看
关于Yii 验证码(captcha)的一些资料
关于如果在表单中添加验证码(captcha),官方文档中一直没有的详细的介绍。下面就如何在YII
blog的评论表单中添加验证码进行说明:
将以下代码插入评论的视图文件: views/comment/_form.php
1. <?php if
(extension_loaded('gd')): ?>
2.
<div
class="row">
3.
<?php echo
CHtml::activeLabelEx($model, 'verifyCode') ?>
4.
<div>
5.
<?php
$this->widget('CCaptcha'); ?>
6.
<?php
echo CHtml::activeTextField($model,'verifyCode');
?>
7.
</div>
8.
<div
class="hint">Please enter the letters as they are
shown in the image above.
9.
<br/>Letters
are not case-sensitive.</div>
10.
</div>
11.
<?php endif; ?>
在模型Comment.php中添加如下代码:
1. public $verifyCode;
在rules()下添加
1. array('verifyCode', 'captcha',
'allowEmpty'=>!Yii::app()->user->isGuest),
在attributeLabels()下添加:
1. 'verifyCode' =>
'Verification Code',
在控制器文件controllers/PostController.php 加添加如下动作:
1. public function
actions() {
2.
return
array(
3.
'captcha'=>array(
4.
'class'=>'CCaptchaAction',
5.
'backColor'=>0xFFFFFF,
6.
),
7.
);
8.
}
此时, 在 rules中,在 'deny all'前,增加如下代码:
1. array('allow',
2.
'actions'=>array('captcha'),
3.
'users'=>array('*'),
4. ),
此时,可显示验证码。
通过使用小物件,提高验证码的通用性
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
CForm为Yii提供了表单自动生成功能,非常灵活和强大。通过传入数组和Model,就可以自动生成表单。有些人不喜欢硬编码,认为这样失去了灵活
性。但是Yii中几乎所有的CSS属性都可以自定义,而我一般使用默认的CSS属性值,这样带来的好处是可以在协作的时候统一CSS属性名。
但是,验证码(Captcha)不是一个CInputWidget,所以不能使用简单的type=>’CCapthca’来将一个字段来显示为验证
码。现有的解决方案是给CForm添加一个字符串元素,但是比较麻烦,需要手工写一些HTML。但是,写一个简单的Widget就可以了啊。为什么要搞得
那么复杂。
比如这样:
1. classCaptchaWidget extends CInputWidget
2. {
3. public $hint =null;
4.
5. public functioninit()
6. {
7. if(!extension_loaded(‘gd’))
8. throw newCException(‘CaptchaWidget need
GD’);
9. }
10.
11. public functionrun()
12. {
13.
echoCHtml::activeTextField($this->model,’captcha’,
$this->htmlOptions);
14.
Yii::app()->controller->widget(‘CCaptcha’);
15. $this->hint===null? ” :
‘<div>’.$this->hint.’</div>’;
16. }
17. }
使用的时候在表单配置数组里面添加一行
‘captcha’=>array(‘type’=>’CaptchaWidge’)。当然,前提是你的Model里面需要有一个
Captcha属性。对于我来说,因为我是代码洁癖,所以对于需要验证码的情况我都不使用原来的Model(比如User的Model),而是使用
CFormModel来新建一个专用的Model。
------------------------------------------------------------------------------------
华丽丽的分割线
-----------------------------------------------------------------------------------------
以上为之前查阅的别人的东西,不记得出处在哪里了,很抱歉.以后找到了,一定注明.(现在只是觉得以上这个文章写的比较全.)
下面说说我自己的做法:
总共会修改以下3个文件:model中文件/controller中/view中
1.在model层的文件中插入
public $verifyCode;
在rules()中插入
array('verifyCode', 'captcha',
'allowEmpty'=>!CCaptcha::checkRequirements()),
在attributeLabels()中插入
'verifyCode'
=>'验证码';
在rules()还要添加
1. array('allow',
2.
'actions'=>array('captcha'),
3.
'users'=>array('*'),
4. ),
2.public function actions()
{
return array(
// captcha action renders the CAPTCHA image
displayed on the contact page
'captcha'=>array(
'class'=>'CCaptchaAction',
'backColor'=>0xFFFFFF,
//背景颜色
'minLength'=>4, //最短为4位
'maxLength'=>4, //是长为4位
'transparent'=>true, //显示为透明
),
);
}
//这一小段摘自http://www.yiichina.org/forum/thread-22-1-1.html
3. 最后在View层的文件中插入
<?php if(CCaptcha::checkRequirements()):
?>
<div>
<?php
$this->widget('CCaptcha'); ?>
<?php echo
$form->textField($model,'verifyCode');?>
</div>
<?php endif;?>
原文:http://blog.csdn.net/zhaoshl_368/article/details/6833883
关于如果在表单中添加验证码(captcha),官方文档中一直没有的详细的介绍。下面就如何在YII
blog的评论表单中添加验证码进行说明:
将以下代码插入评论的视图文件: views/comment/_form.php
1. <?php if
(extension_loaded('gd')): ?>
2.
<div
class="row">
3.
<?php echo
CHtml::activeLabelEx($model, 'verifyCode') ?>
4.
<div>
5.
<?php
$this->widget('CCaptcha'); ?>
6.
<?php
echo CHtml::activeTextField($model,'verifyCode');
?>
7.
</div>
8.
<div
class="hint">Please enter the letters as they are
shown in the image above.
9.
<br/>Letters
are not case-sensitive.</div>
10.
</div>
11.
<?php endif; ?>
在模型Comment.php中添加如下代码:
1. public $verifyCode;
在rules()下添加
1. array('verifyCode', 'captcha',
'allowEmpty'=>!Yii::app()->user->isGuest),
在attributeLabels()下添加:
1. 'verifyCode' =>
'Verification Code',
在控制器文件controllers/PostController.php 加添加如下动作:
1. public function
actions() {
2.
return
array(
3.
'captcha'=>array(
4.
'class'=>'CCaptchaAction',
5.
'backColor'=>0xFFFFFF,
6.
),
7.
);
8.
}
此时, 在 rules中,在 'deny all'前,增加如下代码:
1. array('allow',
2.
'actions'=>array('captcha'),
3.
'users'=>array('*'),
4. ),
此时,可显示验证码。
通过使用小物件,提高验证码的通用性
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
CForm为Yii提供了表单自动生成功能,非常灵活和强大。通过传入数组和Model,就可以自动生成表单。有些人不喜欢硬编码,认为这样失去了灵活
性。但是Yii中几乎所有的CSS属性都可以自定义,而我一般使用默认的CSS属性值,这样带来的好处是可以在协作的时候统一CSS属性名。
但是,验证码(Captcha)不是一个CInputWidget,所以不能使用简单的type=>’CCapthca’来将一个字段来显示为验证
码。现有的解决方案是给CForm添加一个字符串元素,但是比较麻烦,需要手工写一些HTML。但是,写一个简单的Widget就可以了啊。为什么要搞得
那么复杂。
比如这样:
1. classCaptchaWidget extends CInputWidget
2. {
3. public $hint =null;
4.
5. public functioninit()
6. {
7. if(!extension_loaded(‘gd’))
8. throw newCException(‘CaptchaWidget need
GD’);
9. }
10.
11. public functionrun()
12. {
13.
echoCHtml::activeTextField($this->model,’captcha’,
$this->htmlOptions);
14.
Yii::app()->controller->widget(‘CCaptcha’);
15. $this->hint===null? ” :
‘<div>’.$this->hint.’</div>’;
16. }
17. }
使用的时候在表单配置数组里面添加一行
‘captcha’=>array(‘type’=>’CaptchaWidge’)。当然,前提是你的Model里面需要有一个
Captcha属性。对于我来说,因为我是代码洁癖,所以对于需要验证码的情况我都不使用原来的Model(比如User的Model),而是使用
CFormModel来新建一个专用的Model。
------------------------------------------------------------------------------------
华丽丽的分割线
-----------------------------------------------------------------------------------------
以上为之前查阅的别人的东西,不记得出处在哪里了,很抱歉.以后找到了,一定注明.(现在只是觉得以上这个文章写的比较全.)
下面说说我自己的做法:
总共会修改以下3个文件:model中文件/controller中/view中
1.在model层的文件中插入
public $verifyCode;
在rules()中插入
array('verifyCode', 'captcha',
'allowEmpty'=>!CCaptcha::checkRequirements()),
在attributeLabels()中插入
'verifyCode'
=>'验证码';
在rules()还要添加
1. array('allow',
2.
'actions'=>array('captcha'),
3.
'users'=>array('*'),
4. ),
2.public function actions()
{
return array(
// captcha action renders the CAPTCHA image
displayed on the contact page
'captcha'=>array(
'class'=>'CCaptchaAction',
'backColor'=>0xFFFFFF,
//背景颜色
'minLength'=>4, //最短为4位
'maxLength'=>4, //是长为4位
'transparent'=>true, //显示为透明
),
);
}
//这一小段摘自http://www.yiichina.org/forum/thread-22-1-1.html
3. 最后在View层的文件中插入
<?php if(CCaptcha::checkRequirements()):
?>
<div>
<?php
$this->widget('CCaptcha'); ?>
<?php echo
$form->textField($model,'verifyCode');?>
</div>
<?php endif;?>
原文:http://blog.csdn.net/zhaoshl_368/article/details/6833883
相关文章推荐
- 关于&nbsp;YII&nbsp;学习&nbsp;的文章&nbsp;连接
- js 关于中文字符串的一些处理
- arm&nbsp;linux中一些重要的宏及地…
- 关于Spring MVC的参数绑定
- 关于链接器脚本 & makefile
- 关于Yii的菜单插件CMenu和面包屑breadcrumbs路径管理插件的一些使用问题
- 关于&nbsp;laptop-mode-tools&nbsp;的设置
- 【莫比乌斯反演】关于Mobius反演与lcm的一些关系与问题简化(BZOJ 2154 crash的数字表格&amp;&amp;BZOJ 2693 jzptab)
- (转)关于struts2&nbsp;hidden隐藏…
- 关于C++ 除法丢失数据
- Yii框架captcha验证码的使用
- 2016年1月18日&nbsp;21:47:46关于this_2…
- bf3a 关于SQLSERVER SQL性能优化
- 关于SQL Server自动增长字段
- 关于Zend&nbsp;Studio&nbsp;无法用GD库的经验
- 关于[No&nbsp;grammar&nbsp;constraints&nbsp;(DTD…
- Yii使用Captcha验证码的方法
- win7 64位DCOM配置(关于导出…
- (转载)&nbsp;关于nor&nbsp;flash,nand&nbsp;flash…
- 关于javaee servlet的跳转与重定向