Zend_Captcha-Operation.xml 2.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!-- Reviewed: no -->
  3. <!-- EN-Revision: 15103 -->
  4. <sect1 id="zend.captcha.operation">
  5. <title>Captcha の方法</title>
  6. <para>
  7. すべての CAPTCHA アダプタは
  8. <classname>Zend_Captcha_Adapter</classname> を実装しています。
  9. これは次のようなインターフェイスです。
  10. </para>
  11. <programlisting role="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. ]]>
  25. </programlisting>
  26. <para>
  27. name アクセサを使用して、CAPTCHA の識別子を設定したり取得したりします。
  28. <code>getDecorator()</code> を使用して <classname>Zend_Form</classname> のデコレータを指定します。
  29. 名前、あるいは実際のデコレータオブジェクトを返します。
  30. しかし、本当に大事なのは <code>generate()</code>
  31. と <code>render()</code> です。
  32. <code>generate()</code> は、CAPTCHA トークンを作成します。
  33. 通常は、このトークンをセッションに保存し、
  34. その後のリクエストの内容と比較することになります。
  35. <code>render()</code> は CAPTCHA の情報を
  36. (画像や figlet、なぞなぞなどの形式で) レンダリングします。
  37. </para>
  38. <para>
  39. 典型的な使用例は、次のようになります。
  40. </para>
  41. <programlisting role="php"><![CDATA[
  42. // Zend_View インスタンスを作成します
  43. $view = new Zend_View();
  44. // 最初のリクエスト
  45. $captcha = new Zend_Captcha_Figlet(array(
  46. 'name' => 'foo',
  47. 'wordLen' => 6,
  48. 'timeout' => 300,
  49. ));
  50. $id = $captcha->generate();
  51. echo $captcha->render($view);
  52. // それ以降のリクエスト
  53. // すでに captcha が準備済みで、送信された内容が $value に保存されているものとします
  54. if ($captcha->isValid($_POST['foo'], $_POST)) {
  55. // 正解!
  56. }
  57. ]]>
  58. </programlisting>
  59. </sect1>
  60. <!--
  61. vim:se ts=4 sw=4 et:
  62. -->