2016-08-05 23 views
1

ich neue Klasse geschaffen habe, die Zend_Form erstreckt, aber wenn ich versuche durch alle Elemente in meinem neuen benutzerdefinierten Formular iterieren (oder nur zählen sie alle) das Ergebnis ist immer 0.Benutzerdefinierte Form in 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"); 
     } 
    } 
} 
ist

Also suche ich nach benutzerdefinierten Formen von der falschen Seite?

Antwort

1

Sie müssen parent::init() in Poroform_Form::init() aufrufen, bevor Sie über die Formularelemente iterieren.

Wenn Sie dem Ablauf folgen, sehen Sie, dass Sie in Poroform_form::init() an dem Punkt, an dem Sie über die Formularelemente iterieren, wirklich noch keine hinzugefügt haben. Alle Elemente werden in der übergeordneten Application_Form_ZendForm hinzugefügt.

+1

Thx für Wiederholung David. Das Hinzufügen von 'parent :: init()' am Anfang von 'Poroform_Form :: init()' löste das Problem nicht. Tatsächlich habe ich es gelöst, indem ich '$ this-> init();' am Anfang von 'Poroform_Form :: __ construct()' hinzugefügt habe. – porosman