2016-08-05 3 views
1

Я создал новый класс, который расширяет Zend_Form, но когда я пытаюсь перебора всех элементов в моей новой пользовательской формы (или только их сосчитать) результат всегда равен 0.Пользовательские формы в Zend 1,12

class Application_Form_ZendForm extends Poroform_Form { 
    public function init() { 
     parent::init(); 

     $this->setAttrib('id', 'contact-form'); 

     $this->addElement('text', 'textt', array(
      'label' => 'Foo', 
      'value' => 'test', 
      "attribs" => array(
       "icon" => "icon-append fa fa-user", 
       "section" => "col col-6" 
      ), 
     )); 
    } 
} 


class Poroform_Form extends Zend_Form { 

    public function __construct($options = null) { 
     parent::__construct($options); 
    } 

    public function init() { 
     $this->setAttrib("class", "smart-form"); 
     $this->setAttrib("novalidate", "novalidate"); 
     $this->setAttrib("elem_count", count($this->getElements())); //why is result 0? 

     $this->addElementPrefixPath('Poroform_Form_Decorator_', '/Poroform/Form/Decorator/', 'decorator'); 
     $this->setElementDecorators(Array('SmartadminInput')); 

     foreach ($this->getElements() as $element) { //not working 
       $element->setAttrib("test", "aaa"); 
     } 
    } 
} 

Итак, я ищу пользовательские формы с неправильной стороны?

ответ

1

Вы должны позвонить parent::init() в Poroform_Form::init(), прежде чем перебирать элементы формы.

Если вы следуете за потоком, вы увидите, что в Poroform_form::init() в точке, где вы повторяете элементы формы, вы действительно еще не добавили. Все элементы добавляются в родительский Application_Form_ZendForm.

+1

Thx для воспроизведения Дэвида. Добавление 'parent :: init()' в начале 'Poroform_Form :: init()' не решило проблему. На самом деле я решил это, добавив '$ this-> init();' в начале 'Poroform_Form :: __ construct()'. – porosman