Zend_Captcha ohne Zend_Form

Gestern habe ich mich einige Zeit damit rumgeärgert, das Zend_Captcha nicht so will wie ich und auch dutzende Blog Beiträge und Bug Issues konnten nur bedingt helfen. Daher will ich hier ein Minimalbeispiel veröffentlichen, damit Suchende nicht wie ich ihre Zeit unnütz vertrödeln müssen 😉

Bei Erstellung des Formulars:

$view = new Zend_View();
$captcha = new Zend_Captcha_Figlet(array(
    'name'    => 'captcha',
    'wordLen' => 4,
    'timeout' => 300,
));
$id = $captcha->generate();
?>

<form method="post" action="">
<?php echo $captcha->render($view); ?>
<input type="hidden" name="captcha[id]" value="<?php echo $id; ?>" />
<input type="text" name="captcha[input]" /><br />
<input type="submit" value="Auflösen" />
</form>

Wichtig ist hierbei, das der Name (den man auch über $captcha->setName() setzen könnte) mit den Formularwerten übereinstimmt

Anmerkung: Falls Ihr in einer View seid, das $view einfach durch $this ersetzen beim Aufruf von render()

Wenn Ihr nun die Captcha Lösung des Anwenders validieren wollt, das Captcha einfach nochmal erstellen und mit den POST Werten vergleichen:

$captcha = new Zend_Captcha_Figlet(array(
	'name'    => 'captcha',
	'wordLen' => 4,
	'timeout' => 300,
));

if ($captcha->isValid($_POST['captcha'], $_POST)) {
    echo 'Validated!';
}

Das wars auch schon, viel Spaß mit Zend_Captcha als Standalone Lösung!