如何使用Zend Form动态创建多个复选框?

时间:2012-02-26 19:18:09

标签: zend-framework checkbox zend-form

你能帮我解决一下我的问题吗? 我想在使用数据库信息构建的用户列表的每一行上放置一个复选框,并添加一个验证按钮来发布我的表单。我的列表应该是这样的: -

Diagram of form

因此,用户将选择链接到他想要验证的学生的复选框。 结果的行数是可变的,所以我不知道该怎么做。 我希望我的描述中已经清楚了。

2 个答案:

答案 0 :(得分:0)

您没有显示任何代码,但我假设您获得了控制器中某处的学生人数。

要使用Zend_Form实现所需,您需要单独渲染每个元素,但首先需要找到一种向表单添加正确数量的元素的方法。

最好在表单类中执行此操作以保持逻辑不在控制器中,但为了使这个答案简单,我将向您展示如何在控制器中实现此功能,然后您可以根据需要调整代码。

$numStudents = getNumberOfStudentsSomehow();
$studentForm = new yourFormClass();

for($i = 0; $i <= $numStudents; $i++){
    $checkBoxes[] = new Zend_Form_Element_Checkbox('checkBox_' . $i);
}
$studentForm->addElements($checkBoxes);
$this->view->studentForm = $studentForm;

现在,您的表单中包含正确数量的复选框,您可以将其传递给视图 在视图中,您可以使用多种方式呈现表单,RockyFord建议的视图部分,view helperdocumentation here),创建custom view script for your form或直接渲染在你看来。

为了让您入门,您可以在视图中渲染表单中的各个元素,如下所示: -

echo $this->view->studentForm->checkBox_0;

答案 1 :(得分:-1)

我认为这可能是partialLoop()可能是最佳解决方案的情况。

控制器中的

像往常一样从模型中获取数据并将数据分配给视图

$this->view->modelData= $data;

接下来在/views/scripts中为这个演示创建一个新的.phtml文件,我们将其称为_demoRow.phtml,然后将html和php编码为一个表行(在本例中)。

<tr>
    <td><?php echo $this->name ?></td>
    <td><?php echo $this->class ?></td>
    <td><?php echo $this->birth_date ?></td>
    <td><input type="checkbox" name="id" value="<?php echo $this->id ?> /></td>
</tr>

然后在普通视图中输入静态信息并渲染部分

<form action="/your/action/url" method="post">
  <table class="spreadsheet" cellspacing="0">
    <tr>       
        <th>Student Name</th>
        <th>Class</th>
        <th>Birth Date</th>
        <th>Select</th>
    </tr>
    <?php echo $this->partialLoop('_demoRow.phtml', $this->modelData) ?>
    <tr>
        <input type="submit" name="submit" value="valider" />
    </tr>
  </table>
</form>

这应该接近你正在寻找的东西。