yii 验证码那点事儿
今天要使用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 验证码那点事儿的更多相关文章
- yii 验证码 CCaptcha的总结(转)
今天用到yii的验证码 ccaptcha,经过在网上搜寻 找到以下例子: 1.在controller中加入代码 (1)启用 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 &l ...
- Yii验证码简单使用及
控制器:(写了貌似也没用,未解决验证码位数:位数可改核心代码) public $layout = false;//隐藏导航 public function actions(){ return [ // ...
- yii 验证码功能的实现
首先知晓我们在使用验证码的时候通常是和我们的表单小部件配合使用首先我们创建model层 新建一个php文件 名字叫做Verifycode.php 要在我们的model层 创建我们的验证码的验证规则,我 ...
- yii验证码不使用model在控制器中进行验证
控制器 public function actionCheckLogin(){ if(!$this->createAction('verify_code')->validate($_POS ...
- yii 验证码的使用
在HappyController 中加入 public function actions(){ return array( // captcha action renders the CAPTCHA ...
- 关于 yii 验证码显示, 但点击不能刷新的处理
先说说 render 与 renderPartial, 各位看官, 先别走, 我没跑题, 这个问题如果需要解决, 关键就在 render 与 renderPartial 的区别. renderPart ...
- Yii 验证码验证
控制器如下
- yii 验证问题
yii 版本2.08 yii 验证码问题 1.模型里加入'verifyCode', 'captcha','message'=>'error','captchaAction' => 'tes ...
- Yii CActiveForm
http://blog.sina.com.cn/s/blog_685213e70101mo4i.html 文档: http://www.yiiframework.com/doc/api/1.1/CAc ...
随机推荐
- PHP 设计模式之适配器模式
<?php //[主要角色] //目标(Target)角色:定义客户端使用的与特定领域相关的接口,这也就是我们所期待得到的 //源(Adaptee)角色:需要进行适配的接口 //适配器(Adap ...
- [转] Java 8的新特性
简介 毫无疑问,Java 8是Java自Java 5(发布于2004年)之后的最重要的版本.这个版本包含语言.编译器.库.工具和JVM等方面的十多个新特性.在本文中我们将学习这些新特性,并用实际的例子 ...
- Vue 2.0基础
我们将会选择使用一些vue周边的库vue-cli, vue-router,vue-resource,vuex 1.使用vue-cli创建项目2.使用vue-router实现单页路由3.用vuex管理我 ...
- MAC——laravel环境
apache: 目录:etc/apache2 重启:sudo apachectl restart PHP: 把/etc/php.ini.default复制并重命名/ect/php.ini 打开Load ...
- github+Hexo快速搭建个人博客
注意 本文主要针对Windows平台和Hexo 3.x 准备工作 下载Git [下载地址] [Git官网](https://git-scm.com/download/) 下载Node.js [下载地址 ...
- VSTO:无法安装此应用程序,因为已安装具有相同标识的应用程序
原文:VSTO:无法安装此应用程序,因为已安装具有相同标识的应用程序 在开发环境(Win7+VS2010+Outlook 2010)上做一个Outlook AddIn,运行Outlook时报如下错误: ...
- window7 64位安装Python
Python下载地址:https://www.python.org/download/releases/2.7.8/ 选择64位的安装,然后双击打开下载的文件,默认一步步安装. 其中有一个步骤如下图: ...
- SharePoint Server 2007 Enterprise Key
正式版 key SN: Tkjcb-3wkhk-2ty2t-qymk2-9xm2y 这个版本也是通过Key来区分是否是测试版还是正式版的 也就是说你输入正式版的Key他就是正式版,输入Enterpri ...
- 重载(Overloading)以及模板(Template)
继续<C++ premier plus>的学习 (1)函数重载,通俗来说,就是相同的函数名字名下,存在多个函数,要使得这成立,各个同名函数必须形参列表(也称为"签名", ...
- Reward(拓扑排序)
http://acm.hdu.edu.cn/showproblem.php?pid=2647 题意: 老板要给n个员工发工资最低工资是888: 但是工人们是有要求的 如果输入 a b 表示a的工资要比 ...