Это реализует очень сложную реализацию капчи, без использования каких-либо контроллеров или представлений.Конечно, не рекомендуется использовать такой код, но если у вас есть срок, это последнее средство, которое вы можете использовать:
$sec_image_field = $f->addField('line', 'sec_image', 'Security code')
->setNotNull()
->setNoSave();
$captcha_src = '/lib/kcaptcha/?' . $session_name . '=' . session_id();
$kaptcha_img = $sec_image_field->getTag('img',array('src' => $captcha_src, 'id' => 'kpt' ));
$kaptcha_img .= ' <a href="#" onclick="d=new Date(); (jQuery(\'#kpt\')'.
'.attr(\'src\', \'' . $captcha_src . '&t=\' + d.getTime()));return false;">';
$kaptcha_img .= '<i class="atk-icon atk-icons-nobg atk-icon-arrows-left3"></i>';
$kaptcha_img .= ' reload</a>';
$sec_image_field->template->set('after_field', '<ins>Enther the code you see below</ins> <span>' . $kaptcha_img . '</span>'
Примечание: вам нужно скачать и установить kcapcha в / lib / kcapcha/ с их сайта.
Пример: http://agiletech.ie/contact
Реализация ReCapcha, которую вы нашли,гораздо более приличный, но не идеальный.Он вручную просматривает данные POST и просто устанавливает флаг, сообщающий вам, правильно ли он был введен или нет.Вот пример использования:
$rc = $form->add('View_ReCaptcha');
....
if($form->isSubmitted()){
...
if(!$rc->isValid()){
$js=$this->js->univ();
if($r->getError()){
$js->alert($rc->getError());
}else{
$js->alert('Error in capcha');
}
$js->execute();
}
....
}
Примечание. Вам потребуется установить recapcha lib.См. Источник.
Улучшение Capcha
Вероятно, лучшим способом было бы ввести новый тип поля (Form_Field_Capcha), который выполняет все это полностью автоматически.Он не должен связывать какие-либо библиотеки PHP, но будет полагаться на сторонний сервис для генерации изображений.Он также должен использовать стандартную форму проверки .