动态添加文本框到zend表单

时间:2009-11-06 00:06:51

标签: php zend-framework zend-form

我希望这是一个快速回答的问题。我正在使用Zend_Form开发表单,我有一些Zend_Dojo_Form_Element_Textboxs动态添加到此表单。

这些是从数据库中的行添加的,例如

$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++;

            }

然后,表单将显示在视图脚本中,但我需要提取该脚本。由于我不知道表单中存在多少“技能”文本框,我不知道如何循环并将它们添加到视图脚本中。我通常会以下列方式将它们添加到viewScript中:

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

但是我收到警告的错误消息:为foreach()提供的参数无效

我是否会以一种落后的方式解决这个问题并改变我对这种形式的看法,或者我在这里错过了什么?

提前致谢...

1 个答案:

答案 0 :(得分:1)

如果您在控制器的动作功能中创建表单,您可以执行以下操作来告诉您的视图脚本您添加了多少技能文本框。

在控制器中:

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

在视图中:

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

您也可以这样做:

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