2011-01-09 2 views
0

이상한 문제가 있습니다. 나는 Zend를 테스트 중이며 reCaptcha 필드를 양식에 추가해야했습니다. 나는 젠드 문서에서 주어진 예제를 따라 갔다. '잘못된 captcha-sol'오류가 발생하고있었습니다.Zend - Recaptcha 이상한 문제 - 작동하지만 예상치 못한 경우

잠시 동안 주위를 읽은 후 나는 마침내 그 일을 처리 할 수있었습니다. 그러나 isValid 메서드는 예상했던 것과 반대 방향을 반환하는 것으로 보입니다.

양식 :

class Application_Form_Album extends Zend_Form { 

public function init() { 


    ## Set Recapture 


    $this->setName('album'); 
    $this->setMethod('POST'); 
    $id = new Zend_Form_Element_Hidden('id'); 
    $id->addFilter('Int'); 
    $artist = new Zend_Form_Element_Text('artist'); 
    $artist->setLabel('Artist') 
      ->setRequired(true) 
      ->addFilter('StripTags') 
      ->addFilter('StringTrim') 
      ->addValidator('NotEmpty'); 
    $title = new Zend_Form_Element_Text('title'); 
    $title->setLabel('Title') 
      ->setRequired(true) 
      ->addFilter('StripTags') 
      ->addFilter('StringTrim') 
      ->addValidator('NotEmpty'); 
    $submit = new Zend_Form_Element_Submit('submit'); 
    $submit->setAttrib('id', 'submitbutton'); 


    //Change theme 
    $recaptcha = new Zend_Service_ReCaptcha("XXXXXXX","XXXXXXX"); 
    $recaptcha->setOption('theme', 'clean'); 
    $captcha = new Zend_Form_Element_Captcha('challenge', array('captcha' => 'ReCaptcha','captchaOptions' => array('captcha' => 'ReCaptcha','service' => $recaptcha))); 



    $this->addElements(array($id, $artist, $title, $captcha, $submit)); 
} 

}

그리고 컨트롤러 방법 :

public function addAction() 
{ 



    $auth = Zend_Auth::getInstance(); 
    if ($auth->hasIdentity()) { 
     $form = new Application_Form_Album(); 
     $form->submit->setLabel('Add'); 
     $this->view->form = $form; 
     if ($this->getRequest()->isPost()) { 

       $formData = $this->getRequest()->getPost(); 
       if ($form->isValid($formData)) { 

        $captcha = new Zend_Service_ReCaptcha("XXXXXXX","XXXXXXX"); 
        $result = $captcha->verify($this->_getParam('recaptcha_challenge_field'), 
               $this->_getParam('recaptcha_response_field')); 

        if ($result->isValid()) { 
         //ReCaptcha validation error 
         #echo "CAPTCHA FAILED!<br>"; 

        } else { 
         $artist = $form->getValue('artist'); 
         $title = $form->getValue('title'); 
         $albums = new Application_Model_DbTable_Albums(); 
         $albums->addAlbum($artist, $title); 
         $this->_helper->redirector('index'); 
        } 


       } else { 
        $form->populate($formData); 
       } 
     } 
    } else { 
     $this->_helper->redirector('index','auth'); 
    } 

} 
내가 가정했을

($에서 그 결과> isValid (여기

코드입니다))를 입력하여 올바른 captcha가 입력되면 TRUE를 반환합니다. 머리카락을 당긴 후 captcha가 성공적으로 입력되면 $ result-> isValid()가 FALSE를 반환하고 단어 나 단어가 잘못 입력되면 TRUE가 반환됩니다.

이 나는 ​​뭔가를 놓치고 있습니까? 왜 이것이 일어날 수 있는지 아는 사람이 있습니까?

답변

0

컨트롤러에 새로운 Zend_Service_ReCaptcha를 생성 할 필요가 없다고 생각합니다. 양식에서 처리해야합니다. if ($result->isValid()) { 대신 form에서 captcha 요소를 가져 와서 THAT가 유효한지 확인하십시오.

if ($form->getElement('challenge')->isValid() { 
: 그것은 같이 보일 수 http://framework.zend.com/manual/en/zend.captcha.operation.html

의 예를 살펴 보자

관련 문제