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

Zend framework 如何使用Zend Form动态创建多个复选框?,zend-framework,checkbox,zend-form,Zend Framework,Checkbox,Zend Form,你能帮我解决我的问题吗? 我想在使用数据库信息构建的用户列表的每一行上放置一个复选框,并添加一个验证按钮来发布我的表单。我的列表应该如下所示:- echo $this->view->studentForm->checkBox_0; 因此,用户将选中与要验证的学生链接的复选框。 结果的行数是可变的,所以我不知道怎么做。 我希望我的描述已经很清楚了。我认为这可能是一种情况,如果a可能是最好的解决方案。 在控制器中,像往常一样从模型中获取数据,并将数据分配给视图 $this-&g

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

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

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

我认为这可能是一种情况,如果a可能是最好的解决方案。

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

$this->view->modelData= $data;
接下来在
/views/scripts
中创建一个新的.phtml文件,我们将其命名为\u demoRow.phtml,然后为一个表行编写html和php代码(在本例中)



我认为这可能是一种情况,如果a可能是最好的解决方案。

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

$this->view->modelData= $data;
接下来在
/views/scripts
中创建一个新的.phtml文件,我们将其命名为\u demoRow.phtml,然后为一个表行编写html和php代码(在本例中)



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

要使用Zend_表单实现您想要的效果,您需要单独渲染每个元素,但首先需要找到一种方法将正确数量的元素添加到表单中

最好是在表单类中这样做,以避免控制器中出现逻辑,但为了保持答案简单,我将向您展示如何在控制器中实现这一点,然后您可以根据需要修改代码

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

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

要使用Zend_表单实现您想要的效果,您需要单独渲染每个元素,但首先需要找到一种方法将正确数量的元素添加到表单中

最好是在表单类中这样做,以避免控制器中出现逻辑,但为了保持答案简单,我将向您展示如何在控制器中实现这一点,然后您可以根据需要修改代码

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

没有多检查盒这样的东西。复选框已设置或未设置。只需为数据库中的每一行创建一行,并为每一行添加一个唯一的复选框。thx Markus!请告诉我如何为每一行动态添加唯一的复选框。我以前使用zend form在我的应用程序中添加表单(当我已经知道要添加的复选框的数量时)。这次复选框的数量是数据库查找的行数的函数。我必须直接将其添加到视图文件中吗?如果是,如何添加?您不必在视图中添加,可以在表单文件中添加。在结果数组上做一个foreach循环。你能给我一个例子吗?我不明白你的意思。检查一下,没有多检查盒这样的东西。复选框已设置或未设置。只需为数据库中的每一行创建一行,并为每一行添加一个唯一的复选框。thx Markus!请告诉我如何为每一行动态添加唯一的复选框。我以前使用zend form在我的应用程序中添加表单(当我已经知道要添加的复选框的数量时)。这次复选框的数量是数据库查找的行数的函数。我必须直接将其添加到视图文件中吗?如果是,如何添加?您不必在视图中添加,可以在表单文件中添加。在结果数组上做一个foreach循环。你能给我一个例子吗?我不明白你的意思。但是检查一下表单提交时会发生什么?Zend表单将不知道新元素,并且新元素对它不可用。@vascowhite当您点击submit按钮时,表单会像其他表单一样使用post方法提交。Zend_表单不是魔法,它只是抽象表单的构建并生成html,它与表单发布时发生的事情无关。Zend_表单的某些方法不适用于您的解决方案:-
isValid()
,使用
foreach()
逐步遍历元素,
getValues()
getValue()
在任何添加的元素上,
getValidValues()
;所有这些都在提交的表单上工作。还有其他的,但我认为这足以说明我的观点。@vascowhite foreach()可以用于任何数组,isValid属于Zend_Validate和getValues,getValue()只需将Zend_Filter_输入应用于getParams()或getPost()。同意Zend_形式是方便的,但它不是必需的,有时会使事情变得更困难。OP说(暗示?)他正在使用Zend形式。我引用的所有方法都属于这些方法,我直接从代码中获取示例。您的解决方案是有效的,我只是因为OP引用了Zend表单而质疑它。看看你的个人资料,你的背景似乎和我的相似:)但是提交表单时会发生什么?Zend表单将不知道新元素,并且新元素对它不可用。@vascowhite当您点击submit按钮时,表单会像其他表单一样使用post方法提交。Zend_表单不是魔法,它只是抽象表单的构建并生成html,它与表单发布时发生的事情无关。Zend_表单的某些方法不适用于您的解决方案:-
isValid()
,使用
foreach()
逐步遍历元素,
getValues()
getValue()
在任何添加的元素上,
getValidValues()
;所有这些都在提交的表单上工作。还有其他的,但我认为这足以说明我的观点。@vascowhite foreach()可以用于任何数组,isValid属于Zend_Validate和getValues,getValue()只需将Zend_Filter_输入应用于getParams()或getPost()。虽然Zend_形式很方便,但它不是必需的,有时会使事情变得更加困难