sxtuwy 2011-08-10 13:32:03 9729次浏览 17条回复 1 0 0

关于如果在表单中添加验证码(captcha),官方文档中一直没有的详细的介绍。下面就如何在YII blog的评论表单中添加验证码进行说明: 将以下代码插入评论的视图文件: views/comment/_form.php

<?php if (extension_loaded('gd')): ?>
<div class="row">
<?php echo CHtml::activeLabelEx($model, 'verifyCode') ?>
<div>
<?php $this->widget('CCaptcha'); ?>
<?php echo CHtml::activeTextField($model,'verifyCode'); ?>
</div>
<div class="hint">Please enter the letters as they are shown in the image above.
<br/>Letters are not case-sensitive.</div>
</div>
<?php endif; ?>

在模型Comment.php中添加如下代码:

public $verifyCode;

在rules()下添加

array('verifyCode', 'captcha', 'allowEmpty'=>!Yii::app()->user->isGuest),

在attributeLabels()下添加:

'verifyCode' => 'Verification Code',

在控制器文件controllers/PostController.php 加添加如下动作:

public function actions(){
  return array(
    'captcha'=>array(
    'class'=>'CCaptchaAction',
    'backColor'=>0xFFFFFF,
  ),
);
}

此时, 在 rules中,在 'deny all'前,增加如下代码:

array('allow',
  'actions'=>array('captcha'),
  'users'=>array('*'),
),

此时,可显示验证码。

  • 回复于 2011-08-10 13:37 举报

    通过使用小物件,提高验证码的通用性
    CForm为Yii提供了表单自动生成功能,非常灵活和强大。通过传入数组和Model,就可以自动生成表单。有些人不喜欢硬编码,认为这样失去了灵活性。但是Yii中几乎所有的CSS属性都可以自定义,而我一般使用默认的CSS属性值,这样带来的好处是可以在协作的时候统一CSS属性名。

    但是,验证码(Captcha)不是一个CInputWidget,所以不能使用简单的type=>’CCapthca’来将一个字段来显示为验证码。现有的解决方案是给CForm添加一个字符串元素,但是比较麻烦,需要手工写一些HTML。但是,写一个简单的Widget就可以了啊。为什么要搞得那么复杂。

    比如这样:

    class CaptchaWidget extends CInputWidget
    {
      public $hint = null;
    
      public function init()
      {
        if(!extension_loaded(‘gd’))
        throw new CException(‘CaptchaWidget need GD’);
      }
    
    public function run()
    {
      echo CHtml::activeTextField($this->model,’captcha’, $this->htmlOptions);
      Yii::app()->controller->widget(‘CCaptcha’);
      $this->hint===null ? ” : ‘<div>’.$this->hint.’</div>’;
    }
    }
    

    使用的时候在表单配置数组里面添加一行 ‘captcha’=>array(‘type’=>’CaptchaWidge’)。当然,前提是你的Model里面需要有一个Captcha属性。对于我来说,因为我是代码洁癖,所以对于需要验证码的情况我都不使用原来的Model(比如User的Model),而是使用CFormModel来新建一个专用的Model。

  • 回复于 2011-08-25 12:00 举报

    非常有用,支持!

  • 回复于 2011-08-25 12:11 举报

    辛苦了!!!!

  • 回复于 2011-09-23 18:08 举报

    辛苦了!!

  • 回复于 2011-10-09 17:41 举报

    还没理解

  • 回复于 2011-11-26 19:13 举报

    非常感谢

  • 回复于 2011-12-13 22:00 举报

    非常感谢:lol

  • 回复于 2012-01-15 23:34 举报

    好贴子,正需求

  • 回复于 2012-03-14 22:23 举报

    mark一下 不错的

  • 回复于 2012-04-16 11:16 举报

    顶一个。非常有用。非常支持

  • 回复于 2012-05-14 17:24 举报

    威武! 收藏了

  • 回复于 2012-05-18 17:46 举报

    非常有用,支持!

  • 回复于 2012-07-06 11:25 举报

    收藏,顶一下

  • 回复于 2012-07-27 14:02 举报

    :)到底顶顶顶顶顶顶顶顶顶顶

  • 回复于 2012-09-05 21:08 举报

    好好摸索下,效果一直出不来

  • 回复于 2013-05-27 09:42 举报

    做出来 谢谢 感谢楼主

  • 回复于 2016-09-28 13:27 举报

    有个问题yii2的验证码:yii2验证码客户端验证通过 提交就提示错误!原因可能是ajax验证一次 致使验证码在session中已经变了 再提交就提示错误了 怎么解决?

您需要登录后才可以回复。登录 | 立即注册