2012-08-30 19 views
5

Zend Form 2 strukturiert alle Elemente in Fieldsets. (Zend \ Formular \ Formular erweitert Fieldset - Form :: hinzufügen Anrufe parent :: add)Durchlaufen Sie die Formularelemente in der Reihenfolge, in der sie hinzugefügt wurden

Wenn ich nur Elemente zum Formular hinzufügen ich sie über $form->getElements() bekommen kann, wenn ich eine Fieldset verwende ich über bekommen sie

foreach($form->getFieldsets() as $fieldset){ 
    $elements = $fieldset->getElements(); 
} 

Aber stellen Sie sich ein Formular vor, wo ich ein paar versteckte Felder, dann ein Fieldset und zuletzt eine Schaltfläche zum Senden hinzufüge.

Wie kann ich die Elemente/Feldsets in die richtige Reihenfolge bringen?

Grund dafür ist, dass ich an einem View-Helper arbeite, mit dem ich Formulare über einen einfachen Aufruf an den View-Helfer drucken kann.

Ich möchte nicht jedes Formularelement über einen Aufruf formRow() (I des Konzepts hinter Form2 wissen - Logik von der Präsentation zu trennen) nennen

Jede Hilfe ist sehr geschätzt. TIA

Antwort

9

Sie können wie folgt vorgehen, um Elemente und Fieldset in der Bestellung erhalten sie dem Formular hinzugefügt wurden:

/* $form is an instance of \Zend\Form\Form */ 
foreach ($form as $element) { 

    // check if it's a form element or a fieldset etc. 
    // and recursively iterate over elements of fieldsets etc. 
} 
+0

ah danke, so einfach ist, fand ich endlich, wo die IteratorAggregate Schnittstelle eingestellt ist (in FieldsetInterface), aber ich finde nicht die aktuellen | next | prev Methoden für die Iteration. also habe ich nie versucht, das Objekt direkt zu durchlaufen. – Rufinus

Verwandte Themen