2009-12-11 22 views
7

ReCaptcha'yı ZF uygulamamda bir formda eklemem gerekir. Resmi belgeleri takip etmeye çalışıyorum, fakat ReCaptcha servisi bana her zaman 'yanlış-captcha-sol' hatası veriyor. kullanıyorum kodu:Zend framework ve ReCaptcha

(formda)

(denetleyici olarak)

// 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 
} 

Herhangi bir yardım lütfen?

cevap

20

Neden çek oluşturmak için formdan ayrı bir öğe çekiyorsunuz?

Formu

<?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')); 
    } 
} 

Kontrolör

$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 

Görünüm

echo $this->form; 

Bu: Bu bunu nasıl Burada oldukça şeffaf bir kod var. Formun isValid() yürütüldüğünde, tüm öğelerini doğrular ve yalnızca her birinin geçerli olması durumunda true değerini döndürür.

Elbette, kullandığınız anahtarların bu kodu çalıştırdığınız etki alanıyla ilgili olduğundan emin olun.

Başka sorularınız olursa bize bildirin.

+0

Haklısınız! Çok teşekkürler! Beni kurtardın! :) – Stefano

16

the zend site numaralı telefondan hızlıca devam ediyordum ve bana göre 'Figlet' captcha'dan daha hızlı bir değişiklik oldu.

$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 - kabul edilen cevaptan çok daha kolay –

+0

Bu kabul edilen cevap olmalı. Onu kullandım ve mükemmel çalıştı. ReCaptcha için en kolay yol. Teşekkürler dostum;) –

+0

+1 harika cevap :) –