在表单中使用时验证Zend_Captcha_Image

时间:2011-05-06 18:35:49

标签: zend-framework zend-form captcha zend-validate

我在zend框架应用程序中的表单中有以下代码。

$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)) {

任何有关如何正确验证它的解决方案都会有很大的帮助。

由于 尼扎姆

2 个答案:

答案 0 :(得分:0)

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

我在一段时间内发布了一篇博客文章,其中包含了此组件的一些代码示例,请参阅此处 - http://tfountain.co.uk/blog/2009/1/6/zend-captcha-image-experiences,但此帖已有几年历史,因此有些内容可能已发生变化。

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

答案 1 :(得分:0)

查看此帖子:Zend Framework: Captcha problem

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

$form->getElement('captcha')->removeDecorator("viewhelper");