0

J'ai un formulaire, où certains champs ressemblent à des lignes, donc je peux les ajouter/les supprimer en utilisant JS. Par exemple:Zend Framework, Zend_Form_Element comment définir un nom personnalisé?

terrain avec ID = 1 (ligne existante)

<input id="id[1]" type="text" name="id[1]" value="1" /> 
<input id="name[1]" type="text" name="name[1]" value="100" /> 

terrain avec ID = 2 (ligne existante)

<input id="name[2]" type="text" name="name[2]" value="200" /> 
<input id="name[2]" type="text" name="name[2]" value="200" /> 

nouvelle ligne créée par par défaut (pour permettre d'ajouter une ligne supplémentaire aux lignes existantes)

<input id="id[n0]" type="text" name="id[n0]" value="" /> 
<input id="name[n0]" type="text" name="name[n0]" value="" /> 

nouvelle ligne créée par JS

<input id="id[n1]" type="text" name="id[n1]" value="" /> 
<input id="name[n1]" type="text" name="name[n1]" value="" /> 

Alors que nous procéderons sous forme, nous allons savoir ce que les lignes de mise à jour et ce qu'il faut ajouter (si l'index commence par « n » - nouveau, si index est un élément existant en nombre).

J'ai essayé des sous-formulaires ... mais dois-je créer un sous-formulaire pour chaque champ? Si j'utilise le code suivant:

$subForm = new Zend_Form_SubForm(); 
$subForm->addElement('Text', 'n0'); 
$this->addSubForm($subForm, 'pid');  
$subForm = new Zend_Form_SubForm(); 
$subForm->addElement('Text', 'n0'); 
$this->addSubForm($subForm, 'name'); 

Quelle est la meilleure façon de procéder?

1) Utiliser des sous-formulaires?

2) Etendez Zend/Form/Decorator/ViewHelper.php pour utiliser des noms comme name[nX]?

3) D'autres solutions?

Merci.

Répondre

2

L'alternative est de créer un sous-formulaire unique avec tous les champs en place, puis ajouter un tableau de ces sous-formulaires à votre formulaire principal. Voici le code que j'utilise pour cela:

 foreach ($value as $id => $row) { 

       $subForm = clone $origSubForm; 

       $name = 'multi[' . $id . ']'; 
       $subForm->setElementsBelongTo($name); 
       $subForm->setName($name); 
       $subForm->populate($row); 

       $subForms[$id] = $subForm; 
     } 

Mettez ces formes dans un élément de tableau (dans cet exemple nommé multi). Au lieu de tableaux contenant les valeurs individuelles $id[] vous obtenez un tableau contenant [0 => ['id' => .., ], 'n0' => ['id' => ...]]

+0

Merci. c'est ce dont j'ai besoin. – user281571

+0

> Vous n'avez aucune idée de la difficulté de trouver cette information. Je pense que la raison principale était la façon dont j'ai cherché. J'essayais de trouver comment obtenir un tableau pour chaque sous-formulaire. En désespoir de cause, je me suis dit que je fixerais mon propre nom et que j'aurais atterri sur cette page. Vous devriez faire un tutoriel! Ils sont plutôt rares !!! –

Questions connexes