<?xml version="1.0" encoding="UTF-8"?>
<!-- Reviewed: no -->
<!-- EN-Revision: 24249 -->
<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();

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

    public function getMessages();

    public function getErrors();
}
]]></programlisting>

    <para>
        name アクセサを使用して、<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、なぞなぞなどの形式で) レンダリングします。
    </para>

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

    <programlisting language="php"><![CDATA[
// Zend_View インスタンスを作成します
$view = new Zend_View();

// 最初のリクエスト
$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 ID, input => captcha value
if ($captcha->isValid($_POST['foo'], $_POST)) {
    // 正解!
}
]]></programlisting>
</sect1>
<!--
vim:se ts=4 sw=4 et:
-->
