2011-01-09 9 views
0

私は奇妙な問題があります。私はZendをテストしており、フォームにreCaptchaフィールドを追加する必要がありました。私はZendのドキュメントで与えられている例に従いました(それに慣れていません)。 「不正な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'); 
    } 

} 

私は($ result->はisValid(想定しているだろう))を使用して、有効なキャプチャが入力されている場合にTRUEを返します。いくつかの髪を引っ張った後、私は$ result-> isValid()がcaptchaが正常に入力されたときにFALSEを返し、間違った単語や単語が入力されなかったときにTRUEを返すと考えましたか?

何か不足していますか?なぜこれが起こっているのでしょうか?

答えて

0

コントローラに新しいZend_Service_ReCaptchaを作成する必要はありません。フォームはそれを処理する必要があります。 if ($result->isValid()) {の代わりに、フォームからcaptcha要素を取得し、THATが有効かどうかを確認してください。

if ($form->getElement('challenge')->isValid() { 
:それは次のようになります http://framework.zend.com/manual/en/zend.captcha.operation.html

の例を見てみましょう

関連する問題