很久沒寫了,正好有時間了,把以前想寫的先寫上。關於yii中的驗證碼,這裏介紹下驗證碼的使用,好比後臺登錄的時候輸入完用戶名和密碼後,須要再輸入驗證碼這樣會更加的安全。php
從整體來講 大概分爲4個步驟css
1.在對用的控制器裏建一個新的控制器方法(actions)web
2.輸入驗證碼的文本框也用小物件安全
3.修改關於驗證碼的核心類文件(CCapthcaAction) 由於存在一點bugyii
4.而後就是在model裏的rules設置規則,判斷輸入的驗證碼是否正確了this
接下來就詳細說下吧spa
1.我是在後臺登錄頁面裏用 因此我就在登錄裏的controller裏開始開發了,下面是生成驗證碼的方法:code
public function actions(){ return array( 'captcha'=>array( 'class'=>'system.web.widgets.captcha.CCaptchaAction', //引入驗證碼類,看我寫的路徑 我想你應該知道這個類在哪裏了 'height'=>25, //驗證碼畫布長度 'width'=>80, //驗證碼畫布寬度 'minLength'=>4, //驗證碼的最小長度 'maxLength'=>4 //驗證碼的最大長度 ), ); }
2.顯示出來component
2種方法 會了第一種 再來第二種 ,在view裏寫orm
第一種 先把驗證碼輸出:<?php $this->widget('CCaptcha')?>
第二種就是正常的需求了 不只要輸出 還要 能夠刷新更換了:
<?php
$this->widget('CCaptcha',array('showRefreshButton'=>false,'clickableImage'=>true,'imageOptions'=>array('alt'=>'點擊換圖','title'=>'點擊換圖','style'=>'cursor:pointer')));
?>
showRefreshButton的意思是是否顯示更換驗證碼的按鈕,意思就是若是這個按鈕顯示的話 ,每次點擊這個按鈕,驗證碼將進行更換
clickableImage 就是點擊驗證碼圖片是否進行更換true固然就是贊成了
而後可能你就須要對比下生成的驗證碼是否相同,在view裏能夠加個小物件判斷
<?php echo $from->error($loginForm,'captcha')?>
三、修改下核心類
找到framework/web/widgets/captcha/CCapthcaAction.php 文件,將run方法進行如上修改,加入一個true 便可。
4.設置規則 ,判斷驗證碼正確與否
到了最後一步 ,來吧 在model裏書寫驗證規則 ,在rules裏
array('captcha','captcha','message'=>'驗證碼錯誤'),
將本身填寫的和 系統生成的對比,若是不一樣則提示驗證碼錯誤,
而後別忘記顯示出來
在 actionindex裏
有點懶就截圖了 仍是logincontroller裏 判斷下是否有數據提交 若是有則用attributes進行過濾接受,接收後 判斷輸入的驗證碼是否正確便可。
請注意一下這裏我改爲了this->render() 由於以前方法不能引入系統本身的css和js 因此致使驗證碼相關類文件沒法加載因此改爲了如上的render,改爲這種,發現前臺的頭和尾也引入了,怎麼辦 ,咱們把前臺的compoents下的Controller.php文件複製由於到後臺的admin模塊下的components下的Controller.php,在裏面引入一個新的layouts 就好了 這樣以前的頭和尾 就變成了如今新的頭和尾。(若是最後這段看不懂前臺後臺的話,麻煩看下我博客的 yii講解的1-4)
而後就大工告成了,驗證碼能夠在頁面刷新了