# Работа с captcha

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

    interface Zend_Captcha_Adapter extends Zend_Validate_Interface
    {
        public function generate();

        public function render(Zend_View $view, $element = null);

        public function setName($name);

        public function getName();

        public function getDecorator();

        // Additionally, to satisfy Zend_Validate_Interface:
        public function isValid($value);

        public function getMessages();

        public function getErrors();
    }

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

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

    // Создаём объект Zend_View
    $view = new Zend_View();

    // Создаём captcha:
    $captcha = new Zend_Captcha_Figlet(array(
        'name' => 'foo',
        'wordLen' => 6,
        'timeout' => 300,
    ));

    $id = $captcha->generate();
    echo "<form method=\"post\" action=\"\">";
    echo $captcha->render($view);
    echo "</form>";

    // Проверка отправленной формы:
    // Данные captcha находятся с массиве $_POST['foo']
    // в этом массиве должны быть следующие пары ключ => значение:
    // id => идентификатор captcha, input => значение captcha
    if ($captcha->isValid($_POST['foo'], $_POST)) {
        // Validated!
    }