Главная / Zend Manual Core
Введение

Работа с captcha

Все адаптеры CAPTCHA реализуют интерфейс Zend_Captcha_Adapter:

  1. interface Zend_Captcha_Adapter extends Zend_Validate_Interface
  2. {
  3.     public function generate();
  4.  
  5.     public function render(Zend_View $view, $element = null);
  6.  
  7.     public function setName($name);
  8.  
  9.     public function getName();
  10.  
  11.     public function getDecorator();
  12.  
  13.     // Additionally, to satisfy Zend_Validate_Interface:
  14.     public function isValid($value);
  15.  
  16.     public function getMessages();
  17.  
  18.     public function getErrors();
  19. }

Сеттеры и геттеры имени используются для задания и получения идентификатора CAPTCHA. getDecorator() может использоваться для определения декоратора Zend_Form по имени (?) и возвращает текущий объект декоратора. Особенно интересны методы generate() и render(). generate() используется для генерирования токена CAPTCHA. По умолчанию токен хранится в сессии, так что можно использовать его между различными запросами одного клиента. render() генерирует данные, представляющие CAPTCHA -- картинка с искажённым текстом, figlet, логический вопрос или любая иная форма CAPTCHA.

Код для работы с CAPTCHA может выглядеть так:

  1. // Создаём объект Zend_View
  2. $view = new Zend_View();
  3.  
  4. // Создаём captcha:
  5. $captcha = new Zend_Captcha_Figlet(array(
  6.     'name' => 'foo',
  7.     'wordLen' => 6,
  8.     'timeout' => 300,
  9. ));
  10.  
  11. $id = $captcha->generate();
  12. echo "<form method=\"post\" action=\"\">";
  13. echo $captcha->render($view);
  14. echo "</form>";
  15.  
  16. // Проверка отправленной формы:
  17. // Данные captcha находятся с массиве $_POST['foo']
  18. // в этом массиве должны быть следующие пары ключ => значение:
  19. // id => идентификатор captcha, input => значение captcha
  20. if ($captcha->isValid($_POST['foo'], $_POST)) {
  21.     // Validated!
  22. }

Введение