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

    // Zend_Validate_Interface のための追加のメソッド
    public function isValid($value);

    public function getMessages();

    public function getErrors();
}

    

name アクセサを使用して、captcha の識別子を設定したり取得したりします。 getDecorator() を使用して Zend_Form のデコレータを指定します。 名前、あるいは実際のデコレータオブジェクトを返します。 しかし、本当に大事なのは generate()render() です。 generate() は、captcha トークンを作成します。 通常は、このトークンをセッションに保存し、 その後のリクエストの内容と比較することになります。 render() は captcha の情報を (画像や figlet、なぞなぞなどの形式で) レンダリングします。

典型的な使用例は、次のようになります。

// Zend_View インスタンスを作成します
$view = new Zend_View();

// 最初のリクエスト
$captcha = new Zend_Captcha_Figlet(array(
    'name' => 'foo',
    'wordLen' => 6,
    'timeout' => 300,
));
$id = $captcha->generate();
echo $captcha->render($view);

// それ以降のリクエスト
// すでに captcha が準備済みで、送信された内容が $value に保存されているものとします
if ($captcha->isValid($_POST['foo'], $_POST)) {
    // 正解!
}