如何在Zend表单中添加Captcha?

时间:2011-12-20 13:48:00

标签: php zend-framework zend-form captcha

我需要使用Zend Captcha并编写以下代码:

<?php

    require_once ('Zend/Form.php');

    class Form_Signup extends Zend_Form {

        public function __construct( $options = null ) {

            parent::__construct( $options );

            // Set method
            $this->setMethod('post');

            // Elements array
            $elements = array();

            $element = new Zend_Form_Element_Captcha('captcha', array('label'   => "",
                                                                      'captcha' => array('captcha' => 'Image',
                                                                                         'name'    => 'myCaptcha',  
                                                                                         'wordLen' => 5,  
                                                                                         'timeout' => 300,  
                                                                                         'font'    => 'font/monofont.ttf',  
                                                                                         'imgDir'  => 'captcha/',  
                                                                                         'imgUrl'  => '/captcha/')
                                                                     )
                                                    );
            $elements[] = $element;

            // Submit Button
            $element = $this->CreateElement('submit', 'Signup');
            $element->setLabel('Signup');
            $elements[] = $element;

            // --------------------------
            // Add elements to the form
            // --------------------------

            // update tabindex
            foreach ($elements as $index => $element) {
                $element->setAttrib('tabindex', ($index + 1));
            }

            $this->addElements($elements);
            $this->setElementDecorators(array('ViewHelper'));

            // Set form decorator (what script will render the form)
            $this->setDecorators(array(array('ViewScript' , array('viewScript' => 'signup/form.phtml'))));

        }

    }

?>

我遇到的问题是,当我在“form.phtml”文件中显示它时,如:

<?= $this->element->captcha ?>

显示以下内容:

enter image description here

即。它显示2个文本框。

请帮助我抵制这种情况。 :)

2 个答案:

答案 0 :(得分:5)

您正在获取第二个文本字段,因为您正在使用用于验证码元素的ViewHelper装饰器。不要为captcha元素设置ViewHelper装饰器,它应该可以工作。

答案 1 :(得分:0)

嗨,我正在使用此代码删除额外的字段

$captcha = new Zend_Form_Element_Captcha('captcha',array('label' => 'Write the chars to the field',  
                                                            'captcha' => array(
                                                                'captcha' => 'Image',   
                                                                'wordLen' => 3,
                                                                'timeout' => 300,
                                                                'font' => APPLICATION_PATH.'/../public/font/two.ttf', 
                                                                'imgDir' => APPLICATION_PATH.'/../public/captcha/', 
                                                                'imgUrl' => 'http://localhost/projx/public/captcha/'

                                                            ),
                                            'decorators' => $this->elementDecorators,
                                            ));   
                                            $captcha->removeDecorator('ViewHelper');

这是我的装饰者

 'decorators' => $this->elementDecorators,

这是默认装饰

我只是使用关注代码删除ViewHelpre

$captcha->removeDecorator('ViewHelper');

我希望这对你有用...... :)