2011-12-20 5 views
5

мне нужно использовать Zend Captcha и написал код происходит некорректно:Как добавить Captcha в Zend Form?

<?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 текстовых полей.

Просьба помочь мне в противодействии этой ситуации. :)

+0

Опубликовать разметку, которую она производит. – Dunhamzzz

+1

Вы используете полный Zend_Form или просто помещаете капчу? –

+0

Я использую полный Zend_Form. – Ahsan

ответ

5

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

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 используя followig код

$captcha->removeDecorator('ViewHelper'); 

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