Spec-Zone.ru › Yii 1.1

CCaptcha

Пакет system.web.widgets.captcha
Наследование class CCaptcha » CWidget » CBaseController » CComponent
С момента 1.0
Исходный код framework/web/widgets/captcha/CCaptcha.php
CCaptcha отображает элемент изображения CAPTCHA.

CCaptcha используется вместе с CCaptchaAction для обеспечения CAPTCHA — способа предотвращения спама на сайте.

Элемент изображения, отображаемый CCaptcha, будет показывать изображение CAPTCHA, сгенерированное действием класса CCaptchaAction текущего контроллера. По умолчанию, идентификатор действия должен быть 'captcha', который можно изменить, задав captchaAction.

CCaptcha также может отобразить кнопку рядом с изображением CAPTCHA. Нажатие на кнопку обновит изображение CAPTCHA новым в AJAX-режиме.

Если clickableImage установлено в true, нажатие на изображение CAPTCHA обновит CAPTCHA.

Для проверки того, что пользователь вводит проверочный код, соответствующий коду, отображаемому на изображении CAPTCHA, может использоваться CCaptchaValidator.

При сочетании CCaptcha с CActiveForm или CForm убедитесь, что отключена опция ajaxValidation. Выполнение AJAX-валидации обновляет CAPTCHA, делая код недействительным при следующей попытке валидации.

Свойства

Свойство Тип Описание Определено в
actionPrefix string Префикс к идентификаторам действий. CWidget
buttonLabel string Текст метки для кнопки обновления. CCaptcha
buttonOptions array Атрибуты HTML, которые необходимо применить к элементу отображаемой кнопки обновления. CCaptcha
buttonType string Тип кнопки обновления. CCaptcha
captchaAction string Идентификатор действия, который должен предоставить изображение CAPTCHA. CCaptcha
clickableImage boolean Разрешить нажатие на изображение CAPTCHA для обновления символов CAPTCHA. CCaptcha
controller CController Возвращает контроллер, к которому принадлежит этот виджет. CWidget
id string Возвращает ID виджета или генерирует новый, если запрошено. CWidget
imageOptions array Атрибуты HTML, которые необходимо применить к элементу отображаемого изображения. CCaptcha
owner CBaseController Возвращает владельца/создателя этого виджета. CWidget
showRefreshButton boolean Показывать ли кнопку рядом с изображением CAPTCHA. CCaptcha
skin mixed Имя используемой темы этого виджета. CWidget
viewPath string Возвращает директорию, содержащую файлы представления для этого виджета. CWidget

Публичные методы

Метод Описание Определено в
__call() Вызывает метод с указанным именем, который не является методом класса. CComponent
__construct() Конструктор. CWidget
__get() Возвращает значение свойства, список обработчиков событий или поведение на основе его имени. CComponent
__isset() Проверяет, является ли значение свойства null. CComponent
__set() Устанавливает значение свойства компонента. CComponent
__unset() Устанавливает свойство компонента в значение null. CComponent
actions() Возвращает список действий, используемых этим виджетом. CWidget
asa() Возвращает объект поведения с указанным именем. CComponent
attachBehavior() Присоединяет поведение к этому компоненту. CComponent
attachBehaviors() Присоединяет список поведений к компоненту. CComponent
attachEventHandler() Присоединяет обработчик событий к событию. CComponent
beginCache() Начинает кэширование фрагмента. CBaseController
beginClip() Начинает запись клипа. CBaseController
beginContent() Начинает отрисовку содержимого, которое должно быть оформлено указанным представлением. CBaseController
beginWidget() Создаёт виджет и выполняет его. CBaseController
canGetProperty() Определяет, можно ли считать свойство. CComponent
canSetProperty() Определяет, можно ли установить свойство. CComponent
checkRequirements() Проверяет, загружены ли поддерживаемые графические расширения. CCaptcha
createWidget() Создаёт виджет и инициализирует его. CBaseController
detachBehavior() Отсоединяет поведение от компонента. CComponent
detachBehaviors() Отсоединяет все поведения от компонента. CComponent
detachEventHandler() Отсоединяет существующий обработчик событий. CComponent
disableBehavior() Отключает присоединённое поведение. CComponent
disableBehaviors() Отключает все присоединённые к этому компоненту поведения. CComponent
enableBehavior() Включает присоединённое поведение. CComponent
enableBehaviors() Включает все присоединённые к этому компоненту поведения. CComponent
endCache() Завершает кэширование фрагмента. CBaseController
endClip() Завершает запись клипа. CBaseController
endContent() Завершает отрисовку содержимого. CBaseController
endWidget() Завершает выполнение указанного виджета. CBaseController
evaluateExpression() Вычисляет выражение PHP или обратный вызов в контексте этого компонента. CComponent
getController() Возвращает контроллер, к которому принадлежит этот виджет. CWidget
getEventHandlers() Возвращает список присоединённых обработчиков событий для события. CComponent
getId() Возвращает идентификатор виджета или генерирует новый, если запрошено. CWidget
getOwner() Возвращает владельца/создателя этого виджета. CWidget
getViewFile() Ищет файл сценария представления в соответствии с именем представления. CWidget
getViewPath() Возвращает директорию, содержащую файлы представлений для этого виджета. CWidget
hasEvent() Определяет, определено ли событие. CComponent
hasEventHandler() Проверяет, имеет ли указанное событие присоединённые обработчики. CComponent
hasProperty() Определяет, определено ли свойство. CComponent
init() Инициализирует виджет. CWidget
raiseEvent() Вызывает событие. CComponent
registerClientScript() Регистрирует необходимые клиентские скрипты. CCaptcha
render() Отображает представление. CWidget
renderFile() Отображает файл представления. CBaseController
renderInternal() Отображает файл представления. CBaseController
run() Отображает виджет. CCaptcha
setId() Устанавливает идентификатор виджета. CWidget
widget() Создаёт виджет и выполняет его. CBaseController

Защищённые методы

Метод Описание Определено в
renderImage() Отображает изображение CAPTCHA. CCaptcha

Подробное описание свойств

buttonLabel свойство

public string $buttonLabel;

метка для кнопки обновления. По умолчанию — 'Получить новый код'.

buttonOptions свойство

public array $buttonOptions;

HTML атрибуты, которые должны быть применены к элементу рендернутой кнопки обновления.

buttonType свойство

public string $buttonType;

тип кнопки обновления. Он должен быть либо 'link', либо 'button'. Первый относится к гиперссылочной кнопке, а второй — к обычной кнопке. По умолчанию — 'link'.

captchaAction свойство

public string $captchaAction;

идентификатор действия, которое должно предоставить изображение CAPTCHA. По умолчанию 'captcha', что означает действие 'captcha' текущего контроллера. Это свойство также может быть в формате 'ControllerID/ActionID'. Ниже это свойство используется CController::createUrl для создания URL, который будет отображать изображение CAPTCHA. Действие должно быть типа CCaptchaAction.

clickableImage свойство

public boolean $clickableImage;

разрешить нажатие на изображение CAPTCHA для обновления букв CAPTCHA. По умолчанию false. Подсказка: вы можете установить showRefreshButton в значение false, если вы установили это свойство в true, так как они служат той же цели. Для повышения доступности вы можете установить imageOptions, чтобы предоставить подсказки конечным пользователям о том, что изображение кликабельно.

imageOptions свойство

public array $imageOptions;

HTML-атрибуты, которые должны быть применены к элементу изображения.

showRefreshButton свойство

public boolean $showRefreshButton;

отображать ли кнопку рядом с изображением CAPTCHA. Нажатие на кнопку приведет к тому, что изображение CAPTCHA будет заменено новым. По умолчанию true.

Подробное описание методов

checkRequirements() метод (доступен с версии v1.1.5)

public static boolean checkRequirements(string $extension=NULL)
$extension string название для проверки. Возможные значения 'gd', 'imagick' и null. Значение по умолчанию null, что означает, что обе расширения будут проверены. Этот параметр доступен с версии 1.1.13.
{return} boolean true, если расширение ImageMagick с поддержкой PNG или GD с поддержкой FreeType загружено, иначе false
Исходный код: framework/web/widgets/captcha/CCaptcha.php#167 (показать)
public static function checkRequirements($extension=null)
{
    if(
extension_loaded('imagick'))
    {
        
$imagick=new Imagick();
        
$imagickFormats=$imagick->queryFormats('PNG');
    }
    if(
extension_loaded('gd'))
    {
        
$gdInfo=gd_info();
    }
    if(
$extension===null)
    {
        if(isset(
$imagickFormats) && in_array('PNG',$imagickFormats))
            return 
true;
        if(isset(
$gdInfo) && $gdInfo['FreeType Support'])
            return 
true;
    }
    elseif(
$extension=='imagick' && isset($imagickFormats) && in_array('PNG',$imagickFormats))
        return 
true;
    elseif(
$extension=='gd' && isset($gdInfo) && $gdInfo['FreeType Support'])
        return 
true;
    return 
false;
}

Проверяет, загружена ли поддержка указанного расширения графики.

registerClientScript() метод

public void registerClientScript()
Исходный код: framework/web/widgets/captcha/CCaptcha.php#110 (показать)
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)
    {
        
// reserve a place in the registered script so that any enclosing button js code appears after the captcha js
        
$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(document).on('click', '
$selector', 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#97 (показать)
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);
}

Отображает изображение CAPTCHA.

run() метод

public void run()
Исходный код: framework/web/widgets/captcha/CCaptcha.php#83 (показать)
public function run()
{
    if(
self::checkRequirements('imagick') || self::checkRequirements('gd'))
    {
        
$this->renderImage();
        
$this->registerClientScript();
    }
    else
        throw new 
CException(Yii::t('yii','GD with FreeType or ImageMagick PHP extensions are required.'));
}

Отображает виджет.

© 2008–2017 by Yii Software LLC
Licensed under the three clause BSD license.
http://www.yiiframework.com/doc/api/1.1/CCaptcha

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API