CCaptcha
鍖 | system.web.widgets.captcha |
---|---|
缁ф壙 | class CCaptcha » CWidget » CBaseController » CComponent |
婧愯嚜 | 1.0 |
鐗堟湰 | $Id: CCaptcha.php 3515 2011-12-28 12:29:24Z mdomba $ |
婧愮爜 | framework/web/widgets/captcha/CCaptcha.php |
CCaptcha鐢ㄤ簬娓叉煋楠岃瘉鐮佸浘鐗囧厓绱犮
CCaptcha鍜CCaptchaAction涓璧风敤鏉ユ敮鎸CAPTCHA 锛嶄竴绉嶉樆姝㈢綉绔欑殑鍨冨溇淇℃伅鐨勬柟娉曘
鐢盋Captcha鐢熸垚鐨勫浘鍍忓厓绱犳樉绀轰竴寮犵敱褰撳墠鎺у埗鍣ㄤ腑鐨CCaptchaAction鍔ㄤ綔 鐢熸垚鐨勯獙璇佺爜鍥剧墖銆 榛樿鏄紝鍔ㄤ綔ID搴旇涓衡榗aptcha鈥欙紝鍙互閫氳繃淇敼captchaAction璁剧疆銆
CCaptcha鍚屾椂鍙互鍦ㄩ獙璇佺爜鍥剧墖鏃佽竟娓叉煋涓涓寜閽傜偣鍑昏繖涓寜閽 灏卞彲浠ラ氳繃AJAX鏂规硶鏉ユ敼鍙橀獙璇佺爜鍥剧墖銆
濡傛灉clickableImage璁句负true,閭d箞鐐瑰嚮楠岃瘉鐮佸浘鐗 灏变細鍒锋柊楠岃瘉鐮併
CCaptchaValidator鍙互鐢ㄦ潵楠岃瘉鐢ㄦ埛杈撳叆 鐨勯獙璇佺爜鏄惁璺熸樉绀虹殑楠岃瘉鐮佸浘鐗囩浉鍚屻
CCaptcha鍜CCaptchaAction涓璧风敤鏉ユ敮鎸CAPTCHA 锛嶄竴绉嶉樆姝㈢綉绔欑殑鍨冨溇淇℃伅鐨勬柟娉曘
鐢盋Captcha鐢熸垚鐨勫浘鍍忓厓绱犳樉绀轰竴寮犵敱褰撳墠鎺у埗鍣ㄤ腑鐨CCaptchaAction鍔ㄤ綔 鐢熸垚鐨勯獙璇佺爜鍥剧墖銆 榛樿鏄紝鍔ㄤ綔ID搴旇涓衡榗aptcha鈥欙紝鍙互閫氳繃淇敼captchaAction璁剧疆銆
CCaptcha鍚屾椂鍙互鍦ㄩ獙璇佺爜鍥剧墖鏃佽竟娓叉煋涓涓寜閽傜偣鍑昏繖涓寜閽 灏卞彲浠ラ氳繃AJAX鏂规硶鏉ユ敼鍙橀獙璇佺爜鍥剧墖銆
濡傛灉clickableImage璁句负true,閭d箞鐐瑰嚮楠岃瘉鐮佸浘鐗 灏变細鍒锋柊楠岃瘉鐮併
CCaptchaValidator鍙互鐢ㄦ潵楠岃瘉鐢ㄦ埛杈撳叆 鐨勯獙璇佺爜鏄惁璺熸樉绀虹殑楠岃瘉鐮佸浘鐗囩浉鍚屻
鍏叡灞炴
灞炴 | 绫诲瀷 | 鎻忚堪 | 瀹氫箟鍦 |
---|---|---|---|
actionPrefix | string | actions鐨処D鐨勫墠缂銆 褰撳井浠跺湪CController::actions涓0鏄庝簡 鍔ㄤ綔鎻愪緵鑰咃紝鍙互涓哄叾鍔ㄤ綔鐨処D鎸囧畾鍓嶇紑浠ュ尯鍒 浜庡埆鐨勫井浠舵垨鎺у埗鍣ㄣ傚綋寰欢鐢ㄤ簬鎺у埗鍣 鐨勮鍥句腑鏃讹紝蹇呴』閰嶇疆鍚屾牱鐨勫墠缂銆 | CWidget |
buttonLabel | string | 鍒锋柊鎸夐挳鐨勬爣绛俱傞粯璁や负鈥楪et a new code鈥欍 | CCaptcha |
buttonOptions | array | 鐢ㄤ簬娓叉煋鎸夐挳鍏冪礌鐨凥TML灞炴с | CCaptcha |
buttonType | string | 鍒锋柊鎸夐挳绫诲瀷銆傚彲浠ユ槸鈥榣ink鈥欐垨鑰呮槸鈥榖utton鈥欍 鍓嶈呮槸瓒呴摼鎺ユ寜閽紝鍚庤呮槸鏅氱殑鎸夐挳銆 榛樿鐨勬槸鈥榣ink鈥欍 | CCaptcha |
captchaAction | string | 鎻愪緵楠岃瘉鐮佸浘鐗囩殑鍔ㄤ綔ID銆傞粯璁や负鈥榗aptcha鈥欙紝 鎰忓懗鐫褰撳墠鎺у埗鍣ㄧ殑鈥榗aptcha鈥欏姩浣溿傝繖涓睘鎬т篃鍙互鏄楥ontrollerID/ActionID鈥 杩欑鏍煎紡銆備笅闈紝杩欎釜灞炴ф槸鐢CController::createUrl鏉 鍒涘缓浣跨敤浜庨獙璇佺爜鍥剧墖鐨刄RL銆 杩欎釜鍔ㄤ綔蹇呴』涓CCaptchaAction銆 | CCaptcha |
clickableImage | boolean | 鏄惁鍏佽閫氳繃鐐瑰嚮楠岃瘉鐮佸浘鐗囧埛鏂伴獙璇佺爜瀛楃銆 榛樿涓篺alse銆傛敞鎰忥細濡傛灉浣犳兂瑕佽缃繖涓睘鎬т负true锛屼綘搴旇 璁剧疆showRefreshButton涓篺alse锛屽洜涓轰粬浠彁渚涚浉鍚岀殑鍔熻兘銆 涓轰簡澧炲己璁块棶鎬э紝浣犲簲璇ヨ缃imageOptions浠ラ氱煡鐢ㄦ埛锛 鍥剧墖鏄彲浠ョ偣鍑荤殑銆 | CCaptcha |
controller | CController | 杩斿洖姝ゅ井浠舵墍灞炵殑鎺у埗鍣ㄣ | CWidget |
id | string | 杩斿洖姝ゅ井浠剁殑ID銆傚鏋滈渶瑕佺殑璇濓紝灏嗙敓浜т竴涓柊鐨処D骞跺皢鍏惰繑鍥炪 | CWidget |
imageOptions | array | 鐢ㄤ簬娓叉煋鍥惧儚鍏冪礌鐨凥TML灞炴с | CCaptcha |
owner | CBaseController | 杩斿洖姝ゅ井浠剁殑鎵鏈夎呮垨鍒涘缓鑰呫 | CWidget |
showRefreshButton | boolean | 鏄惁鏄剧ず鐢ㄦ潵鍒锋柊楠岃瘉鐮佸浘鐗囩殑鎸夐挳銆傜偣鍑绘寜閽椂浼氬埛鏂 楠岃瘉鐮佸浘鐗囥傞粯璁や负true銆 | CCaptcha |
skin | mixed | 寰欢浣跨敤鐨勭毊鑲ょ殑鍚嶇О銆傞粯璁や负鈥渄efault鈥濄 濡傛灉姝ゅ睘鎬ц缃负false锛屽井浠跺皢涓嶄細鏈夌毊鑲よ浣跨敤銆 | CWidget |
viewPath | string | 杩斿洖鍖呭惈姝ゅ井浠舵墍闇鐨勮鍥炬枃浠剁殑璺緞銆 | CWidget |
鍏叡鏂规硶
鏂规硶 | 鎻忚堪 | 瀹氫箟鍦 |
---|---|---|
__call() | 濡傛灉绫讳腑娌℃湁璋冪殑鏂规硶鍚嶏紝鍒欒皟鐢ㄨ繖涓柟娉曘 | CComponent |
__construct() | 鏋勯犲櫒銆 | CWidget |
__get() | 杩斿洖涓涓睘鎬у笺佷竴涓簨浠跺鐞嗙▼搴忓垪琛ㄦ垨涓涓涓哄悕绉般 | CComponent |
__isset() | 妫鏌ヤ竴涓睘鎬ф槸鍚︿负null銆 | CComponent |
__set() | 璁剧疆涓涓粍浠剁殑灞炴у笺 | CComponent |
__unset() | 璁剧疆涓涓粍浠剁殑灞炴т负null銆 | CComponent |
actions() | 杩斿洖姝idget浣跨敤鐨勫姩浣滅殑鍒楄〃銆 | CWidget |
asa() | 杩斿洖杩欎釜鍚嶅瓧鐨勮涓哄璞° | CComponent |
attachBehavior() | 闄勫姞涓涓涓哄埌缁勪欢銆 | CComponent |
attachBehaviors() | 闄勫姞涓涓涓哄垪琛ㄥ埌缁勪欢銆 | CComponent |
attachEventHandler() | 涓轰簨浠堕檮鍔犱竴涓簨浠跺鐞嗙▼搴忋 | CComponent |
beginCache() | Begins fragment caching. | CBaseController |
beginClip() | Begins recording a clip. | CBaseController |
beginContent() | Begins the rendering of content that is to be decorated by the specified view. | CBaseController |
beginWidget() | Creates a widget and executes it. | CBaseController |
canGetProperty() | 纭畾灞炴ф槸鍚﹀彲璇汇 | CComponent |
canSetProperty() | 纭畾灞炴ф槸鍚﹀彲鍐欍 | CComponent |
checkRequirements() | 妫鏌ユ槸鍚︽敮鎸丟D搴撱 | CCaptcha |
createWidget() | Creates a widget and initializes it. | CBaseController |
detachBehavior() | 浠庣粍浠朵腑鍒嗙涓涓涓恒 | CComponent |
detachBehaviors() | 浠庣粍浠朵腑鍒嗙鎵鏈夎涓恒 | CComponent |
detachEventHandler() | 鍒嗙涓涓瓨鍦ㄧ殑浜嬩欢澶勭悊绋嬪簭銆 | CComponent |
disableBehavior() | 绂佺敤涓涓檮鍔犺涓恒 | CComponent |
disableBehaviors() | 绂佺敤缁勪欢闄勫姞鐨勬墍鏈夎涓恒 | CComponent |
enableBehavior() | 鍚敤涓涓檮鍔犺涓恒 | CComponent |
enableBehaviors() | 鍚敤缁勪欢闄勫姞鐨勬墍鏈夎涓恒 | CComponent |
endCache() | Ends fragment caching. | CBaseController |
endClip() | Ends recording a clip. | CBaseController |
endContent() | Ends the rendering of content. | CBaseController |
endWidget() | Ends the execution of the named widget. | CBaseController |
evaluateExpression() | 璁$畻涓涓狿HP琛ㄨ揪寮忥紝鎴栨牴鎹粍浠朵笂涓嬫枃鎵ц鍥炶皟銆 | CComponent |
getController() | 杩斿洖姝ゅ井浠舵墍灞炵殑鎺у埗鍣ㄣ | CWidget |
getEventHandlers() | 杩斿洖涓涓簨浠剁殑闄勫姞澶勭悊绋嬪簭鍒楄〃銆 | CComponent |
getId() | 杩斿洖姝ゅ井浠剁殑ID銆傚鏋滈渶瑕佺殑璇濓紝灏嗙敓浜т竴涓柊鐨処D骞跺皢鍏惰繑鍥炪 | CWidget |
getOwner() | 杩斿洖姝ゅ井浠剁殑鎵鏈夎呮垨鍒涘缓鑰呫 | CWidget |
getViewFile() | 鏍规嵁瑙嗗浘鍚嶆煡鎵捐鍥炬枃浠躲 | CWidget |
getViewPath() | 杩斿洖鍖呭惈姝ゅ井浠舵墍闇鐨勮鍥炬枃浠剁殑璺緞銆 | CWidget |
hasEvent() | 纭畾涓涓簨浠舵槸鍚﹀畾涔夈 | CComponent |
hasEventHandler() | 妫鏌ヤ簨浠舵槸鍚︽湁闄勫姞鐨勫鐞嗙▼搴忋 | CComponent |
hasProperty() | 纭畾灞炴ф槸鍚﹁瀹氫箟銆 | CComponent |
init() | 鍒濆鍖栨寰欢銆 | CWidget |
raiseEvent() | 鍙戣捣涓涓簨浠躲 | CComponent |
registerClientScript() | 鍔犺浇闇瑕佺殑瀹㈡埛绔剼鏈 | CCaptcha |
render() | 娓叉煋涓涓鍥俱 | CWidget |
renderFile() | Renders a view file. | CBaseController |
renderInternal() | Renders a view file. | CBaseController |
run() | 娓叉煋鎸備欢銆 | CCaptcha |
setId() | 璁剧疆姝ゅ井浠剁殑ID銆 | CWidget |
widget() | Creates a widget and executes it. | CBaseController |
灞炴ц缁
buttonLabel
灞炴
public string $buttonLabel;
鍒锋柊鎸夐挳鐨勬爣绛俱傞粯璁や负鈥楪et a new code鈥欍
buttonOptions
灞炴
public array $buttonOptions;
鐢ㄤ簬娓叉煋鎸夐挳鍏冪礌鐨凥TML灞炴с
buttonType
灞炴
public string $buttonType;
鍒锋柊鎸夐挳绫诲瀷銆傚彲浠ユ槸鈥榣ink鈥欐垨鑰呮槸鈥榖utton鈥欍 鍓嶈呮槸瓒呴摼鎺ユ寜閽紝鍚庤呮槸鏅氱殑鎸夐挳銆 榛樿鐨勬槸鈥榣ink鈥欍
captchaAction
灞炴
public string $captchaAction;
鎻愪緵楠岃瘉鐮佸浘鐗囩殑鍔ㄤ綔ID銆傞粯璁や负鈥榗aptcha鈥欙紝 鎰忓懗鐫褰撳墠鎺у埗鍣ㄧ殑鈥榗aptcha鈥欏姩浣溿傝繖涓睘鎬т篃鍙互鏄楥ontrollerID/ActionID鈥 杩欑鏍煎紡銆備笅闈紝杩欎釜灞炴ф槸鐢CController::createUrl鏉 鍒涘缓浣跨敤浜庨獙璇佺爜鍥剧墖鐨刄RL銆 杩欎釜鍔ㄤ綔蹇呴』涓CCaptchaAction銆
clickableImage
灞炴
public boolean $clickableImage;
鏄惁鍏佽閫氳繃鐐瑰嚮楠岃瘉鐮佸浘鐗囧埛鏂伴獙璇佺爜瀛楃銆 榛樿涓篺alse銆傛敞鎰忥細濡傛灉浣犳兂瑕佽缃繖涓睘鎬т负true锛屼綘搴旇 璁剧疆showRefreshButton涓篺alse锛屽洜涓轰粬浠彁渚涚浉鍚岀殑鍔熻兘銆 涓轰簡澧炲己璁块棶鎬э紝浣犲簲璇ヨ缃imageOptions浠ラ氱煡鐢ㄦ埛锛 鍥剧墖鏄彲浠ョ偣鍑荤殑銆
imageOptions
灞炴
public array $imageOptions;
鐢ㄤ簬娓叉煋鍥惧儚鍏冪礌鐨凥TML灞炴с
showRefreshButton
灞炴
public boolean $showRefreshButton;
鏄惁鏄剧ず鐢ㄦ潵鍒锋柊楠岃瘉鐮佸浘鐗囩殑鎸夐挳銆傜偣鍑绘寜閽椂浼氬埛鏂 楠岃瘉鐮佸浘鐗囥傞粯璁や负true銆
鏂规硶璇︾粏
checkRequirements()
鏂规硶
锛堝彲鐢ㄨ嚜 v1.1.5锛
public static boolean checkRequirements()
| ||
{return} | boolean | true if GD with FreeType support is loaded, otherwise false |
婧愮爜锛 framework/web/widgets/captcha/CCaptcha.php#160 (鏄剧ず)
public static function checkRequirements()
{
if (extension_loaded('gd'))
{
$gdinfo=gd_info();
if( $gdinfo['FreeType Support'])
return true;
}
return false;
}
妫鏌ユ槸鍚︽敮鎸丟D搴撱
registerClientScript()
鏂规硶
public void registerClientScript()
|
婧愮爜锛 framework/web/widgets/captcha/CCaptcha.php#108 (鏄剧ず)
public function registerClientScript()
{
$cs=Yii::app()->clientScript;
$id=$this->imageOptions['id'];
$url=$this->getController()->createUrl($this->captchaAction,array(CCaptchaAction::REFRESH_GET_VAR=>true));
$js="";
if($this->showRefreshButton)
{
$cs->registerScript('Yii.CCaptcha#'.$id,'dummy');
$label=$this->buttonLabel===null?Yii::t('yii','Get a new code'):$this->buttonLabel;
$options=$this->buttonOptions;
if(isset($options['id']))
$buttonID=$options['id'];
else
$buttonID=$options['id']=$id.'_button';
if($this->buttonType==='button')
$html=CHtml::button($label, $options);
else
$html=CHtml::link($label, $url, $options);
$js="jQuery('#$id').after(".CJSON::encode($html).");";
$selector="#$buttonID";
}
if($this->clickableImage)
$selector=isset($selector) ? "$selector, #$id" : "#$id";
if(!isset($selector))
return;
$js.="
jQuery('$selector').live('click',function(){
jQuery.ajax({
url: ".CJSON::encode($url).",
dataType: 'json',
cache: false,
success: function(data) {
jQuery('#$id').attr('src', data['url']);
jQuery('body').data('{$this->captchaAction}.hash', [data['hash1'], data['hash2']]);
}
});
return false;
});
";
$cs->registerScript('Yii.CCaptcha#'.$id,$js);
}
鍔犺浇闇瑕佺殑瀹㈡埛绔剼鏈
renderImage()
鏂规硶
protected void renderImage()
|
婧愮爜锛 framework/web/widgets/captcha/CCaptcha.php#95 (鏄剧ず)
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);
}
娓叉煋楠岃瘉鐮佸浘鐗囥
run()
鏂规硶
public void run()
|
婧愮爜锛 framework/web/widgets/captcha/CCaptcha.php#81 (鏄剧ず)
public function run()
{
if(self::checkRequirements())
{
$this->renderImage();
$this->registerClientScript();
}
else
throw new CException(Yii::t('yii','GD and FreeType PHP extensions are required.'));
}
娓叉煋鎸備欢銆