2009-12-11 21 views
7

私のZFアプリケーションのフォームにReCaptchaを挿入する必要があります。私は公式の文書に従おうとしていますが、ReCaptchaサービスは私にいつもエラー「wrong-captcha-sol」を返します。 私が使用しているコード:Zend frameworkとReCaptcha

(フォームで)

(コントローラに)

// configure the captcha service 
$privateKey = 'XXXXXXXXXXXXXXXXXXX'; 
$publicKey = 'YYYYYYYYYYYYYYYYYYYY'; 
$recaptcha = new Zend_Service_ReCaptcha($publicKey, $privateKey); 

// create the captcha control 
$captcha = new Zend_Form_Element_Captcha('captcha', 
           array('captcha' => 'ReCaptcha', 
             'captchaOptions' => array(
              'captcha' => 'ReCaptcha', 
              'service' => $recaptcha))); 

$this->addElement($captcha); 

$recaptcha = new Zend_Service_ReCaptcha('YYYYYYYYYYYYY', 'XXXXXXXXXXXXXXX'); 

$result = $recaptcha->verify($this->_getParam('recaptcha_challenge_field'), 
          $this->_getParam('recaptcha_response_field')); 

if (!$result->isValid()) { 
    //ReCaptcha validation error 
} 

任意のヘルプしてください?

答えて

20

なぜチェックを行うためにフォームから別の要素を引き出すのですか?これは私がこれを行う方法です。

フォーム

<?php 
class Default_Form_ReCaptcha extends Zend_Form 
{ 
    public function init() 
    { 
     $publickey = 'YOUR KEY HERE'; 
     $privatekey = 'YOUR KEY HERE'; 
     $recaptcha = new Zend_Service_ReCaptcha($publickey, $privatekey); 

     $captcha = new Zend_Form_Element_Captcha('captcha', 
      array(
       'captcha'  => 'ReCaptcha', 
       'captchaOptions' => array('captcha' => 'ReCaptcha', 'service' => $recaptcha), 
       'ignore' => true 
       ) 
     ); 

     $this->addElement($captcha); 

     $this->addElement('text', 'data', array('label' => 'Some data')); 
     $this->addElement('submit', 'submit', array('label' => 'Submit')); 
    } 
} 

コントローラ

$form = new Default_Form_ReCaptcha(); 

if ($this->getRequest()->isPost()===true) { 
    if($form->isValid($_POST)===true) { 
     $values = $form->getValues(); 
     var_dump($values); 
     die(); 
    } 
} 

$this->view->form = $form 

ビュー

echo $this->form; 

このここではかなり透明なコードです。フォームのisValid()が実行されると、すべての要素が検証され、それぞれが有効な場合にのみtrueが返されます。

もちろん、使用しているキーがこのコードを実行するドメインに関連していることを確認してください。

ご質問がある場合はお知らせください。

+0

あなたはそうです!どうもありがとう!あなたは私を救いました! :) – Stefano

16

私はthe zend siteでクイックスタートしていましたが、私にとっては、以下のものが「Figlet」キャプチャからはるかに速い変更でした。

$this->addElement('captcha', 'captcha', array(
     'label' => 'Please enter two words displayed below:', 
     'required' => true, 
     'captcha' => array(
      'pubkey' => '---your public key here---', 
      'privkey' => '---your private key here---', 
      'captcha' => 'reCaptcha' 
     ) 
    )); 
+4

+1 - 受け入れられた答えよりもはるかに簡単です –

+0

これは受け入れられる回答である必要があります。私はそれを使用し、それは完全に働いた。 reCaptchaのための最も簡単な方法。ありがとうございました;) –

+0

+1素晴らしい答え:) –