2009-11-06 6 views
0

J'espère que c'est une question rapide à répondre. Je développe un formulaire en utilisant Zend_Form, j'ai un certain nombre de Zend_Dojo_Form_Element_Textboxs pour ajouter à ce formulaire dynamiquement.dynamicalement ajouter des zones de texte à zend_form

Elles sont ajoutées à partir des lignes de la base de données, par ex.

$count = 0; 
      //we now loop through the skill types and add them to the form. 
      foreach($skillResult as $skill){ 

       $skillTextBox = new Zend_Dojo_Form_Element_ValidationTextBox('skill-'.$count, 
        array('trim' => true, 
         'NotEmpty' => true, 
         'invalidMessage' => 'This can not be blank' 
        ) 
       ); 
       $skillTextBox->addValidator('NotEmpty') 
        ->removeDecorator('DtDdWrapper') 
        ->removeDecorator('HtmlTag') 
        ->removeDecorator('Label'); 

       //add the element to the form. 
       $myForm->addElement($skillTextBox); 

       $count++; 

      } 

Le formulaire est ensuite affiché dans un script de vue, que j'ai cependant besoin d'extraire. Comme je ne sais pas combien de zones de texte 'compétence' existent dans le formulaire, je ne suis pas sûr de savoir comment je peux passer en boucle et les ajouter au script de vue. Je regarderais normalement à les ajouter à la viewScript de la manière suivante:

<?php foreach($this->element->getElement('skill') as skill) :?> 
    <tr> 
    <td><?php echo $skill;?></td> 
    </tr> 
<?php endforeach;?> 

Cependant, je reçois un message d'erreur de Warning: Invalid argument supplied for foreach()

Vais-je sur ce d'une manière rétrograde et changer mon approche de cette forme ou suis-je manquant quelque chose ici?

Merci à l'avance ...

Répondre

1

Si vous créez le formulaire en fonction d'action, vous pouvez faire quelque chose comme ceci pour dire votre script de vue d'un contrôleur combien de zones de texte de compétences vous ajouté ..

contrôleur:

$this->view->skillTextBoxCount = $count; 

Vu:

// the view is now "this" 
$skillCount = $this-skillTextBoxCount; 

Vous pourriez aussi faire quelque chose comme ceci:

$elements = $form->getElements(); 
foreach($elements as $element) { 
    if (strpos($element->getName(), 'skill-') === 0) { // must use === here 
     // do something with your element 
    } 
} 
Questions connexes