これについてかなりの数の投稿を読みましたが、問題を解決できませんでした。Zend フォームのキャプチャを検証しようとすると、正しいテキストであっても常に失敗します。これが私のコードです:
// フォームを呼び出す場所
public function contactAction()
{
$this->view->form = new Forms_ContactForm();
}
//私のフォーム
class Forms_ContactForm extends Twitter_Form
{
public function init()
{
$this->setAction( 'email/email/contact' );
$this->setMethod('post');
$this->addElement('text', 'strFirstName', array(
'required' => true,
'label' => 'Your First Name' ) );
$this->addElement('text', 'strLastName', array(
'required' => true,
'label' => 'your Last Name' ) );
$this->addElement('text', 'strEmail', array( 'validators' => array(
array('EmailAddress') ),
'required' => true,
'label' => 'Your Email' ) );
$this->addElement('textarea', 'strContent', array(
'required' => true,
'label' => 'Your message' ) );
$this->addElement('captcha', 'captcha', array(
'label' => 'Please enter the 5 letters displayed below:',
'required' => true,
'name' => 'captchaField',
'captcha' => 'image',
'captchaOptions' => array(
'captcha' => 'image',
'font'=> 'static/font/arial.ttf',
'imgDir'=>'static/img/captcha',
'imgUrl'=> 'static/img/captcha/',
'wordLen' => 5,
'fsize'=>20,
'height'=>60,
'width'=>200,
'gcFreq'=>50,
'expiration' => 300)
));
$this->addElement('submit', 'submit', array('class' => 'Submit') );
}
}
// そしてそれを送信する私のアクション
public function contactAction()
{
if( $this->_request->isPost() )
{
$objForm = new Forms_ContactForm();
if( $objForm->isValid($_POST) )
{
$arrParams = $this->_request->getParams();
if( $arrParams['strFirstName'] && $arrParams['strLastName'] && $arrParams['strEmail'] && $arrParams['strContent'] )
{
$this->_objEmail = new Zend_Mail();
$this->_objEmail ->setFrom( $arrParams['strEmail'] );
$this->_objEmail ->setSubject( 'C' );
$this->_objEmail ->setBodyHtml( 'Message from: '. $arrParams['strFirstName'] . ' ' . $arrParams['strLastName'] .
'<BR>eMail address: ' . $arrParams['strEmail'] . '<BR><BR>'
. $arrParams['strContent'] );
$this->_objEmail ->addTo( 'mail@gmail.com' );
$this->view->bolSent = $this->_objEmail->send();
}
}
else
$this->view->form = $objForm;
}
}
私のcontactActionでは、新しいキャプチャコードが生成されるようです。そのため、送信したものと一致しませんが、修正方法がわかりません。
お時間をいただき、ありがとうございました!!
危険な何かを見ました:接触アクションで $_POST をダンプすると、ここに私の結果があります:
array
'strFirstName' => string 'fghjfghj' (length=8)
'strLastName' => string 'ffffffff' (length=8)
'strEmail' => string 'fvhkbno@biu.fr' (length=14)
'strContent' => string 'fewfew' (length=6)
'captchaField' => string 'cebfe69ead38dba86a6b557dc8853b24' (length=32)
入力したばかりのキャプチャが表示されず、代わりにキャプチャ ケイが表示されます !!??
編集
あなたのリプレイをありがとう!!! あなたの変更があってもまだそこにはありませんが、私は何が間違っていると思います. キャプチャ フィールドの html は次のとおりです。
<div class="control-group">
<label class="control-label required" for="captchaField-input">Please enter the 5 letters displayed below:</label>
<div class="controls">
<img width="200" height="60" src="static/img/captcha/ab2d15044a637338064b39cfd2675837.png" alt="">
<input type="hidden" id="captchaField-id" value="ab2d15044a637338064b39cfd2675837" name="captchaField[id]">
<input type="text" value="" id="captchaField-input" name="captchaField[input]">
<input type="text" value="ab2d15044a637338064b39cfd2675837" id="captchaField" name="captchaField">
</div>
</div>
送信されたパラメーターを見ると、次のようになります。
captchaField ab2d15044a637338064b39cfd2675837 captchaField[id] ab2d15044a637338064b39cfd2675837 captchaField[入力] 6af7u
cptchaField は [id] と [input] を上書きしているようです
この captchaField を削除する必要があるように感じますが、これまでのところ方法がわかりません!
私はJSでそれを行うことができましたが、そうするためのきれいな方法が必要です!
もう一度編集
シリアル化を使用してフォームを送信するために ajax を使用しています。それが問題かもしれません。
TER編集
ajaxが原因ではありません。手動で行を削除した場合:
<input type="text" value="ab2d15044a637338064b39cfd2675837" id="captchaField" name="captchaField">
firebug では、すべてが正常であり、キャプチャは適切に検証されます。問題は、この行を適切に削除する方法です...
解決
苦労した後、ここに解決策があります(デコレータを削除します)!
$captcha = new Zend_Form_Element_Captcha('captchaField',
array('label' => "Please enter the 5 letters displayed below:",
'required'=>true,
'captcha' => array(
'captcha' => 'image',
'font'=> 'static/font/arial.ttf',
'imgDir'=>'static/img/captcha',
'imgUrl'=> 'static/img/captcha/',
'wordLen' => 5,
'fsize'=>20,
'height'=>60,
'width'=>200,
'gcFreq'=>50,
'expiration' => 300
)
));
$this->addElement($captcha);
$this->getElement('captchaField')->removeDecorator("viewhelper");