Zend framework 在表单中使用时验证Zend_验证码图像

Zend framework 在表单中使用时验证Zend_验证码图像,zend-framework,zend-form,captcha,zend-validate,Zend Framework,Zend Form,Captcha,Zend Validate,我在zend framework应用程序中有以下代码 $captcha = new Zend_Form_Element_Captcha('captcha', array( 'label' => "", 'captcha' => 'image', 'captchaOptions' => array(

我在zend framework应用程序中有以下代码

$captcha = new Zend_Form_Element_Captcha('captcha', array(
                        'label' => "",  
                        'captcha' => 'image',
                        'captchaOptions' => array(  
                                'captcha' => 'image',  
                                'font'=> APPLICATION_PATH . '/../public_html/assets/fonts/akbar.ttf',
                                'imgDir'=> APPLICATION_PATH . '/../public_html/assets/captcha/',
                                'imgUrl'=> '/assets/captcha/',
                        'wordLen' => 1,
                        'fsize'=>20,
                        'height'=>60,
                        'width'=>200,
                        'gcFreq'=>50,
                        'expiration' => 300)
                        )); 
表单元素的显示与预期一致

当我尝试使用以下代码验证表单时,它总是返回错误,即使我正确输入了验证码

    if($this->getRequest()->isPost()) {
        if($this->view->form->isValid($_POST)) {
任何关于如何正确验证它的解决方案都将大有裨益

谢谢
尼扎姆

我猜你也在做
$captcha->generate()isPost()之前的code>。问题是,当您提交表单时,您在检查POST数据之前生成了一个新的CAPTCHA,因此检查总是会失败,因为它是根据新的CAPTCHA进行验证的。解决方案只是将generate调用进一步向下移动

不久前,我在博客上发布了一篇关于这个组件的一些代码示例,请看这里——但是这篇文章已经有几年的历史了,所以有些事情可能已经改变了

如果这没有帮助,请编辑您的问题以包含更多的代码,以便我们可以查看可能导致问题的其他原因。

查看此帖子:

基本上,您必须从元素中删除“viewhelper”。 例:


如果删除captcha元素,一切正常吗?是的,只有captcha验证总是失败。我发现,当发出表单请求时,会生成新的验证码。但我无法理解如何在之前验证它,并且在表单中重新验证。
$form->getElement('captcha')->removeDecorator("viewhelper");