Web 開發的過程中 , ?經常會用到驗證碼 , ?以防止機器人不斷的提交數據 , ?造成網站的癱瘓 . Yii 裏提供了壹個驗證碼的插件 , ?就是 Captcha。參考資料/lesson.html
第壹步:
在項目中使用?Captcha?需要以下壹些設置?:?在?Controller?裏添加方法?actions
public function actions ()
?{
return array (
?'captcha' => array (
'class' => 'CCaptchaAction' ,
'minLength' => 1 ,
'maxLength' => 5 ,
'backColor' => 0xFFFFFF ,
'width' => 100 ,
'height' => 40
?)
);
?}
同時?,?需要將?captacha?添加到?accessRules?裏?,?以允許所有用戶訪問該方法?.?如下
添加壹個屬性:
public $verifyCode;
? array('verifyCode', 'captcha', 'allowEmpty'=>!CCaptcha::checkRequirements()),
array('captcha', 'captcha', 'allowEmpty'=>!extension_loaded('gd'), 'on'=>'login'),//在rules數組最後添加:
第二在妳的視圖裏面加上以下代碼 ?
<?php $this->widget('CCaptcha'); ?>
// 下面這個可以點擊圖片進行換驗證碼
?<div><?php $this->widget('CCaptcha',array('showRefreshButton'=>false,'clickableImage'=>true,'imageOptions'=>array('alt'=>'點擊換圖','title'=>'點擊換圖','style'=>'cursor:pointer'))); ?></div>
第三?我們需要在我們的?form?model?中添加壹個?verifycode?的屬性來存放用戶輸入的驗證碼,然後通過?captcha?驗證器來驗證用戶輸入的驗證碼的準確性。
public $verifyCode;
並在rules中添加如下
public function rules()
{
?return array(
...
array('verifyCode', 'captcha', 'on'=>'login', 'allowEmpty'=> !extension_loaded('gd')),
...
);
}
驗證碼為什麽沒有刷新的原因:
後臺登陸調用驗證碼,點擊驗證碼不刷新,沒有反應(所有驗證碼配置,參數都是正確的)。找錯的時候發現可以刷新驗證碼的頁面比不可以刷新驗證碼的頁面多了壹段?js?代碼,用來處理點擊驗證碼刷新的事件。
為什麽會少了壹段代碼?原來就是因為控制器分別調用了?renderPartial?和?render.?下面就說說它們的區別:
在進行頁面輸出渲染的時候。
render?輸出父模板的內容,將渲染的內容,嵌入父模板。
renderPartial?則不輸出父模板的內容。只對本次渲染的局部內容,進行輸出。
同時還有個重要的區別:
render?函數內部默認執行?processOutput($output)?函數,?會將把組件,比如?CTreeView?裏面註冊到?CClientScript?裏面的需要的腳本進行渲染輸出。
而?renderPartial()?默認不自動渲染輸出客戶端腳本,需要進行參數的指定,才會輸出:
renderPartial($view,$data=null,$return=false,$processOutput=false)
指定?processOutput?為?true?即可。
就像我們遇到的問題,用?renderPartial?時,頁面沒有輸出驗證碼刷新的那段?js,所以顯示不正常。
更多問題到問題求助專區/