<?xml version="1.0" encoding="UTF-8"?>
<!-- Reviewed: no -->
<sect1 id="zend.captcha.operation">
    <title>Работа с captcha</title>

    <para>
        Все адаптеры <acronym>CAPTCHA</acronym> реализуют интерфейс
        <classname>Zend_Captcha_Adapter</classname>:
    </para>

    <programlisting language="php"><![CDATA[
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();
}
]]></programlisting>

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

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

    <programlisting language="php"><![CDATA[
// Создаём объект 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!
}
]]></programlisting>
</sect1>
<!--
vim:se ts=4 sw=4 et:
-->
