# Captcha Anwendung

Alle CAPTCHA Adapter implementieren `Zend_Captcha_Adapter`, welches wie folgt aussieht:

    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();

        // Zusätzlich um das Zend_Validate_Interface zu befriedigen:
        public function isValid($value);

        public function getMessages();

        public function getErrors();
    }

Die benannten Getter- und Settermethoden werden verwenden um den CAPTCHA Identifikator zu spezifizieren und zu empfangen. `getDecorator()` kann verwendet werden um einen `Zend_Form` Dekorator entweder durch seinen Namen zu Spezifizieren oder indem ein aktuelles Dekoratorobjekt zurückgegeben wird. Der interessantesten Methoden sind aber `generate()` und `render()`. `generate()` wird verwendet um das CAPTCHA Token zu erstellen. Dieser Prozess speichert das Token typischerweise in der Session damit es in nachfolgenden Anfragen verglichen werden kann. `render()` wird verwendet um die Informationen die das CAPTCHA repräsentieren darzustellen - ob es ein Bild ist, ein Figlet, ein logisches Problem, oder andere CAPTCHA.

Ein typischer Verwendungsfall könnte wie folgt aussehen:

    // Eine Instanz von Zend_View erstellen
    $view = new Zend_View();

    // Originale Anfrage:
    $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>";

    // Eine nachfolgende Anfrage:
    // Angenommen das Captcha wurde wie vorher eingestellt, dann wäre der Wert von
    // $_POST['foo'] ein Schlüssel/Wert Array:
    // id => captcha ID, input => captcha value
    if ($captcha->isValid($_POST['foo'], $_POST)) {
        // Validated!
    }