Всем привет!
Хотелось бы открыть цикл “статей” на тему “Какая же убогая оффициальная документация по ентаму фреймворку”
И поднять в данной статье следующую тему: Каптча.
Про то как создать это чудо и куда его прикрепить, шоп оно работало написано много однобокого мусора, в данном манускрипте покажу как работать с капчей если она у вас участвует в работе во многих контроллерах, итакс:
- Определяем КаптчаЭкшенс.
КаптчаЭкшенс может быть только один на все приложение, иначе нифика не валидируется (почему об этом не написать в офф.документации - ума не приложу).
Выбераем контроллер куда мы этот экшенс всунем. Я всунул в SiteController (где этот экшенс, сопствинно, и был по дефолту).
/**
* Declares class-based actions.
*/
public function actions()
{
return array(
// captcha action renders the CAPTCHA image displayed on the contact page
'captcha'=>array(
'class'=>'CCaptchaAction',
'backColor'=>0xFFFFFF,
),
…
- Апдейтим модель, валидирующую форму с каптчей
public $verifyCode;
public function rules() {
array(‘verifyCode’, ‘captcha’, ‘allowEmpty’ => !extension_loaded(‘gd’), ‘captchaAction’ => ‘site/captcha’),
…
Выделенный жирным фрагмент кода - очень важен, поскольку указывает где находиться СиКаптчаВалидатор.Экшенс
- Правим форму
Включаем эту хрень: ‘enableAjaxValidation’=>true, - если хотим аяксовую валидацию
Добавляем стандартную шнягу:
<?php if (extension_loaded(‘gd’)) {?>
<div class="row">
<?php echo $form->labelEx($model, 'verifyCode');?>
<div>
<?php $this->widget('CCaptcha', [b]array('captchaAction' => 'site/captcha')[/b]);?>
<?php echo $form->textField($model, 'verifyCode');?>
</div>
[b]<?php echo $form->error($model, 'verifyCode');?>[/b]
</div>
<?php }?>
Выделено жирный 1 - важный кусок кода, указывает каптче, где находиться СиКаптчаЭкшенс
Выделено жирным 2 - важный участок кода, демонстрируем ризалты юзерских попыток угадать каптчу
Также, в вызове формы, в которой участвует каптча, можно указать Экшенс, задача которого будет отвалидировать поступающие данные… если экшенс не указан запросы идут в то место, из которого эта форма была зарендерина
Все спасибо за внимание
и побольше хороших каптч