TigerZF
🌐Español

18.2. Funcionamiento de Captcha

Todos los adaptadores CAPTCHA implementan Zend_Captcha_Adapter, que tiene el siguiente aspecto:

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

Los métodos setter y getter del nombre se usan para especificar y recuperar el identificador del CAPTCHA. getDecorator() puede usarse para especificar un decorador de Zend_Form ya sea por nombre o devolviendo un objeto decorador real. Los métodos más interesantes son generate() y render(). generate() se usa para crear el token CAPTCHA. Este proceso normalmente almacenará el token en la sesión para que pueda compararlo en solicitudes posteriores. render() se usa para renderizar la información que representa el CAPTCHA, ya sea una imagen, un figlet, un problema lógico, u otro tipo de CAPTCHA.

Un caso de uso típico podría verse como el siguiente:

// Creating a Zend_View instance
$view = new Zend_View();

// Originating request:
$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>";

// On subsequent request:
// Assume captcha setup as before, the value of $_POST['foo']
// would be key/value array: id => captcha ID, input => captcha value
if ($captcha->isValid($_POST['foo'], $_POST)) {
    // Validated!
}