2009-12-16 7 views
0

J'essaye de créer 1 forme de base dans Zend qui fait partie de beaucoup d'autres formes. Par exemple: les 3 éléments suivants pourraient être une forme de sous ou d'un mini-forme qui est une partie d'une forme plus large: -Nom -Âge -AdresseExiste-t-il un moyen de créer différents sous-formulaires à l'aide de Zend_Form et de les regrouper en un seul formulaire?

Je veux juste réutiliser la même forme dans différents endroits - en ajoutant parfois des éléments comme 'adresse de livraison' etc Je suis coincé au point de soumission des données - lorsque j'utilise plusieurs formulaires, je ne peux pas avoir plusieurs boutons de soumission - un seul. Donc, évidemment, toutes les données ne sont pas capturées - seulement les données du formulaire qui contient le sous-formulaire.

Une pensée ici? J'ai utilisé Zend_Form dans le passé - mais je n'aime jamais ça.

Répondre

1

Vous devez créer un seul objet Zend_Form. Si vous wan pour ajouter votre Name, Age et Address à une forme et leur demander de regarder normale, faites ceci:

$display_form = new DisplayForm(); 
$naa_form = new NameAgeAddressForm(); 
$display_form->addElements($naa_form->getElements()); 

Si vous souhaitez les regarder comme un sous-forme (c.-à- un peu regroupés dans une unité secondaire), faites ceci:

$display_form = new DisplayForm(); 
$display_form->addSubForm(new NameAgeAddressForm()); 
0

Configurez votre réutilisable Nom/âge/forme d'adresse comme si (le plus probable dans init() de l'extension, de sorte que vous ne verriez pas la plupart de ce code dans votre action.)

$littleForm = new Zend_Form(); 
$littleForm->addElement(new Zend_Form_Element_Text('name')); 
$littleForm->addElement(new Zend_Form_Element_Text('age')); 
$littleForm->addElement(new Zend_Form_Element_Text('address')); 
$littleForm->addElement(new Zend_Form_Element_Submit('submit')); 

Puisque vous n'avez pas besoin d'autres décorateurs pour le formulaire de NAA, vous définissez FormElements comme le seul décorateur et retirer le bouton d'envoi de la forme NAA

$littleForm->setDecorators(array('FormElements')); 
$littleForm->removeElement('submit'); 

Configurer votre écran/forme principale comme cela, et définissez l'ordre du formulaire NAA lorsque vous l'ajoutez en tant que sous-formulaire afin qu'il affiche au-dessus des éléments du formulaire principal.

$bigForm = new Zend_Form(); 
$bigForm->addElement(new Zend_Form_Element_Text('shippingAddress')); 
$bigForm->addElement(new Zend_Form_Element_Submit('submit')); 
$bigForm->addSubForm($littleForm, 'littleForm', 1); 

$this->view->form = $bigForm; 

Affichez le formulaire dans le script de vue

echo $this->form; 

Voilà comment vous le faites en utilisant des décorateurs. Personnellement, je triche et affiche mes formes à travers un script partiel et utilise seulement les décorateurs pour rendre les éléments d'entrée. Probablement vous voudriez des étiquettes et des choses aussi ...

+0

Merci beaucoup - cela a fonctionné! –