Zend_Captcha-Operation.xml 2.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!-- Reviewed: no -->
  3. <!-- EN-Revision: 24249 -->
  4. <sect1 id="zend.captcha.operation">
  5. <title>Captcha の方法</title>
  6. <para>
  7. すべての <acronym>CAPTCHA</acronym> アダプタは
  8. <classname>Zend_Captcha_Adapter</classname> を実装しています。
  9. これは次のようなインターフェイスです。
  10. </para>
  11. <programlisting language="php"><![CDATA[
  12. interface Zend_Captcha_Adapter extends Zend_Validate_Interface
  13. {
  14. public function generate();
  15. public function render(Zend_View $view, $element = null);
  16. public function setName($name);
  17. public function getName();
  18. public function getDecorator();
  19. // Zend_Validate_Interface のための追加のメソッド
  20. public function isValid($value);
  21. public function getMessages();
  22. public function getErrors();
  23. }
  24. ]]></programlisting>
  25. <para>
  26. name アクセサを使用して、<acronym>CAPTCHA</acronym> の識別子を設定したり取得したりします。
  27. <methodname>getDecorator()</methodname> を使用して <classname>Zend_Form</classname> のデコレータを指定します。
  28. 名前、あるいは実際のデコレータオブジェクトを返します。
  29. しかし、本当に大事なのは <methodname>generate()</methodname>
  30. と <methodname>render()</methodname> です。
  31. <methodname>generate()</methodname> は、<acronym>CAPTCHA</acronym> トークンを作成します。
  32. 通常は、このトークンをセッションに保存し、
  33. その後のリクエストの内容と比較することになります。
  34. <methodname>render()</methodname> は <acronym>CAPTCHA</acronym> の情報を
  35. (画像や figlet、なぞなぞなどの形式で) レンダリングします。
  36. </para>
  37. <para>
  38. 典型的な使用例は、次のようになります。
  39. </para>
  40. <programlisting language="php"><![CDATA[
  41. // Zend_View インスタンスを作成します
  42. $view = new Zend_View();
  43. // 最初のリクエスト
  44. $captcha = new Zend_Captcha_Figlet(array(
  45. 'name' => 'foo',
  46. 'wordLen' => 6,
  47. 'timeout' => 300,
  48. ));
  49. $id = $captcha->generate();
  50. echo "<form method=\"post\" action=\"\">";
  51. echo $captcha->render($view);
  52. echo "</form>";
  53. // それ以降のリクエスト
  54. // すでに captcha が準備済みで、$_POST['foo'] の中身が
  55. // 次のようなキー/値の配列になっているものとします
  56. // id => captcha ID, input => captcha value
  57. if ($captcha->isValid($_POST['foo'], $_POST)) {
  58. // 正解!
  59. }
  60. ]]></programlisting>
  61. </sect1>
  62. <!--
  63. vim:se ts=4 sw=4 et:
  64. -->