今天要使用yii验证码, 不过, 这个验证码是整站通用的, 也就是说, 有个表单的提交是使用ajax方式来提交, 整站, 不管在哪个地方, 都能点出来此窗口, 来提交信息

关于yii验证码, framework/web/widgets/captcha/CCaptcha.php里, 它源码里有这么一部分

>---protected function renderImage()
>---{
>--->---if(!isset($this->imageOptions['id']))
>--->--->---$this->imageOptions['id']=$this->getId(); >--->---$url=$this->getController()->createUrl($this->captchaAction,array('v'=>uniqid()));
>--->---$alt=isset($this->imageOptions['alt'])?$this->imageOptions['alt']:'';
>--->---echo CHtml::image($url,$alt,$this->imageOptions);
>---}

可以看得到, 它每个验证码的生成, 验证都是附着于当前控制器的, 所以, 对于整站通用的, 默认是行不通的.

换个思路, 既然知道ajax访问的路径, 那就修改默认的方法, 让其载入时, 都访问同一控制器, 可以把 framework/web/widgets/captcha/CCaptcha.php 这个文件复制一份, 放至项目下的 protected/widgets 目录下, 名字自己定, 我在这里定CommonCaptcha.php, 在配置文件 main.php 里设置自动导入(import)

<?php
return array(
'import' => array(
'application.widgets.*',
),
); ?>

然后, 可以在复制过来的文件里搜索    'getController' , 不出意外的话, 是可以搜索到两个的.

第一个 $url=$this->getController()->createUrl($this->captchaAction,array('v'=>uniqid()));

可修改为 $url=Yii::app()->createUrl('/onlineService/captcha',array('v'=>uniqid()));

第二个 $url=$this->getController()->createUrl($this->captchaAction,array(CCaptchaAction::REFRESH_GET_VAR=>true));

可修改为 $url=Yii::app()->createUrl('/onlineService/captcha',array(CCaptchaAction::REFRESH_GET_VAR=>true));

也就是不使用获取的控制器, 而是指定控制器, 指定验证码的路径.

然后在控制器里, 就可以使用

$this->createAction('captcha')->getVerifyCode();

这句代码, 在onlineService控制器里获取验证码, 然后对比post过来的验证码, 就可以了, 这样, 也无需在model里再多加一个验证的参数了.

至此, 验证Ok

yii 验证码那点事儿的更多相关文章

  1. yii 验证码 CCaptcha的总结(转)

    今天用到yii的验证码 ccaptcha,经过在网上搜寻 找到以下例子: 1.在controller中加入代码 (1)启用 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 &l ...

  2. Yii验证码简单使用及

    控制器:(写了貌似也没用,未解决验证码位数:位数可改核心代码) public $layout = false;//隐藏导航 public function actions(){ return [ // ...

  3. yii 验证码功能的实现

    首先知晓我们在使用验证码的时候通常是和我们的表单小部件配合使用首先我们创建model层 新建一个php文件 名字叫做Verifycode.php 要在我们的model层 创建我们的验证码的验证规则,我 ...

  4. yii验证码不使用model在控制器中进行验证

    控制器 public function actionCheckLogin(){ if(!$this->createAction('verify_code')->validate($_POS ...

  5. yii 验证码的使用

    在HappyController 中加入 public function actions(){ return array( // captcha action renders the CAPTCHA ...

  6. 关于 yii 验证码显示, 但点击不能刷新的处理

    先说说 render 与 renderPartial, 各位看官, 先别走, 我没跑题, 这个问题如果需要解决, 关键就在 render 与 renderPartial 的区别. renderPart ...

  7. Yii 验证码验证

    控制器如下

  8. yii 验证问题

    yii 版本2.08 yii 验证码问题 1.模型里加入'verifyCode', 'captcha','message'=>'error','captchaAction' => 'tes ...

  9. Yii CActiveForm

    http://blog.sina.com.cn/s/blog_685213e70101mo4i.html 文档: http://www.yiiframework.com/doc/api/1.1/CAc ...

随机推荐

  1. apache rewrite .htaccess 站点内容重定向实例

    <IfModule mod_rewrite.c> Options +FollowSymlinks RewriteEngine On RewriteCond %{REQUEST_FILENA ...

  2. Mrakdown文本编辑器

    http://www.csdn.net/article/2014-05-05/2819623 WMD WMD (wmd-editor)是一个简单轻量级的HTML编辑器,使用的是 Markdown 文本 ...

  3. jQuery简单的轮播特效

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  4. python 时间戳

    import timeprint time.time()输出的结果是(单位:s):1395421406.39 x = time.localtime(x) x = time.strftime('%Y-% ...

  5. SQLSERVER 2008 R2版本密钥(摘)

    开发版32位:MC46H-JQR3C-2JRHY-XYRKY-QWPVM开发版64位:FTMGC-B2J97-PJ4QG-V84YB-MTXX8 工组版:XQ4CB-VK9P3-4WYYH-4HQX3 ...

  6. 原 IOS之NSValue整理

    原 IOS之NSValue整理 发表于2年前(2013-02-28 23:02)   阅读(1974) | 评论(0) 5人收藏此文章, 我要收藏 赞3 IOS NSValue 值对象(value o ...

  7. !a && !b 和 !(a || b) 的故事

    // awk代码,当continue执行时说明书是免费的 || )) { continue } 这段代码大概是半年前写的,半年后过来读,发现已经不理解这段代码了,虽然理解当contniue执行时意味着 ...

  8. ExtJS 4 表单

    Form Panel表单面板就是普通面板Panel增加了表单处理能力.表单面板可以用在任何需要收集用户提交数据的地方.表单面板可以使用Container Layout提供的最简单的拜访表单控件的方式. ...

  9. K Smallest Sums

    uva11997:http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_prob ...

  10. C 和 OC 字符串转换 NSString 和 char * 转换 const char* 与 char *

    #import <Foundation/Foundation.h> int main(int argc, const char * argv[]) { char *s = "He ...