CCaptcha
| Пакет | system.web.widgets.captcha |
|---|---|
| Наследование | class CCaptcha » CWidget » CBaseController » CComponent |
| С момента | 1.0 |
| Исходный код | framework/web/widgets/captcha/CCaptcha.php |
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 |
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() |
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() |
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() |
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