Как добавить капчу в Zend Form? - PullRequest
       19

Как добавить капчу в Zend Form?

5 голосов
/ 20 декабря 2011

Мне нужно использовать 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 ]

5 голосов
/ 06 января 2012

Вы получаете второе текстовое поле, потому что вы используете декоратор ViewHelper для элемента капчи. Не устанавливайте декоратор ViewHelper для элемента captcha, и он должен работать.

0 голосов
/ 01 марта 2015

привет, я использую этот код для удаления дополнительного поля

$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');

Надеюсь, это сработает для вас ...:)

...