- 1 第一个应用 Hello World
- 2 Yii Web 应用基础
- 3 为应用添加日志
- 4 Hangman 猜单词游戏实例
- 5 URL 管理
- 6 CComponent 组件
- 7 使用 CHtml 创建 Form
- 8 使用 FormModel
- 9 UI 组件 Widget 概述
- 10 UI 组件 自定义组件
- 11 UI 组件 ActiveForm 示例
- 12 UI 组件 ClipWidget 示例
- 13 UI 组件 ContentDecorator 示例
- 14 UI 组件 MaskedTextField 示例
- 15 UI 组件 MultiFileUpload 示例
- 16 UI 组件 StarRating 示例
- 17 UI 组件 TabView 示例
- 18 UI 组件 TextHighlighter 示例
- 19 UI 组件 TreeView 示例
- 20 UI 组件 Captcha 示例
- 21 UI 组件 自定义 Captcha 示例
- 22 UI 组件 Zii 组件简介
- 23 数据库-概述
- 24 数据库-DAO 示例
- 25 数据库-Query Builder 示例
- 26 数据库-Active Record 示例
- 27 数据库-关联 Active Record 示例
- 28 Data Provider 简介
- 29 Zii 组件-Menu 示例
- 30 Zii 组件-ListView 示例
- 31 Zii 组件-DetailView 示例
- 32 Zii 组件-GridView 示例
- 33 Zii 组件-Accordion 示例
- 34 Zii 组件-AutoComplete 示例
- 35 Zii 组件-Button 示例
- 36 Zii 组件-DatePicker 示例
- 37 Zii 组件-Dialog 示例
- 38 Zii 组件-ProgressBar 示例
- 39 Zii 组件-Slider 示例
- 40 Zii 组件-SliderInput 示例
- 41 Zii 组件-Tabs 示例
- 42 Zii 组件-Draggable 示例
- 43 Zii 组件-Droppable 示例
- 44 Zii 组件-Resizable 示例
- 45 Zii 组件-Selectable 示例
- 46 Zii 组件-Sortable 示例
- 47 主题 Theme 示例
- 48 多国语言示例
20 UI 组件 Captcha 示例
Captcha(全自动区分计算机和人类的图灵测试-Completely Automated Public Turing test to tell Computers and Humans Apart,简称 CAPTCHA )俗称验证码,是一种区分用户是 计算机 和 人 的公共全自动程序。在 CAPTCHA 测试中,作为 服务器 的计算机会自动生成一个问题由用户来解答。这个问题可以由计算机生成并评判,但是必须只有人类才能解答。由于计算机无法解答 CAPTCHA 的问题,所以回答出问题的用户就可以被认为是人类。
Yii Framework 提供了类 CCaptcha 和 CCaptchaAction 用于支持验证码,要注意的是这个功能需要有 PHP GD 扩展支持,可以通过 Yii 的 Requirements 应用来查询:
图片 20.1 picture20.1
如果显示 Warning,可以通过安装 GD 扩展库,并修改 PHP.ini 打开该功能。
CCaptcha 也提供方法 CCaptcha::checkRequirements() 来检测 GD 库是否安装。
本例通过修改 UI 组件 StarRating 示例 为其添加 Captcha 功能,只有输入的验证码正确时,用户评分才有效,避免机器自动评分。
首先是修改 DataModel,添加一个属性 verifyCode 用来存放用户输入的验证码,并给其添加 CCaptchaValidator 验证。
class DataModel extends CFormModel { public $rating; public $verifyCode; public function rules() { return array( array('rating,verifyCode', 'safe'), array('verifyCode','captcha', 'allowEmpty'=>!CCaptcha::checkRequirements()), ); } }
然后修改 SiteController,添加 actions 方法,Captcha 组件缺省使用 CCaptchaAction,其缺省 ID 为 captcha。
public function actions() { return array( 'captcha'=>array( 'class' => 'CCaptchaAction', )); }
下面就可以在 View 中添加 Captcha 组件了:
<div class="form"> <?php $form=$this->beginWidget('CActiveForm'); ?> <?php echo $form->errorSummary($model); ?> <?php if(CCaptcha::checkRequirements()): ?> <?php $this->widget('CStarRating',array( 'model'=>$model, 'attribute'=>'rating', 'name'=>'rating', 'value'=>3, )); ?> <p /> <?php echo $form->label($model,'verifyCode') ?> <p /> <?php $this->widget('CCaptcha'); ?> <p /> <?php echo $form->textField($model,'verifyCode') ?> <div class="row submit"> <?php echo CHtml::submitButton('Submit'); ?> </div> <?php endif ?> <?php $this->endWidget(); ?> </div><!-- form -->
图片 20.2 picture20.2
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论