導入

Captcha の方法

すべての CAPTCHA アダプタは Zend_Captcha_Adapter を実装しています。 これは次のようなインターフェイスです。

  1. interface Zend_Captcha_Adapter extends Zend_Validate_Interface
  2. {
  3.     public function generate();
  4.  
  5.     public function render(Zend_View $view, $element = null);
  6.  
  7.     public function setName($name);
  8.  
  9.     public function getName();
  10.  
  11.     public function getDecorator();
  12.  
  13.     // Zend_Validate_Interface のための追加のメソッド
  14.     public function isValid($value);
  15.  
  16.     public function getMessages();
  17.  
  18.     public function getErrors();
  19. }

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

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

  1. // Zend_View インスタンスを作成します
  2. $view = new Zend_View();
  3.  
  4. // 最初のリクエスト
  5. $captcha = new Zend_Captcha_Figlet(array(
  6.     'name' => 'foo',
  7.     'wordLen' => 6,
  8.     'timeout' => 300,
  9. ));
  10.  
  11. $id = $captcha->generate();
  12. echo "<form method=\"post\" action=\"\">";
  13. echo $captcha->render($view);
  14. echo "</form>";
  15.  
  16. // それ以降のリクエスト
  17. // すでに captcha が準備済みで、$_POST['foo'] の中身が
  18. // 次のようなキー/値の配列になっているものとします
  19. // id => captcha ID, input => captcha value
  20. if ($captcha->isValid($_POST['foo'], $_POST)) {
  21.     // 正解!
  22. }

導入