我正在使用 Zend Framework 1.12,制作一个包含多个表单的页面。我在其中使用一个主表单和子表单。因此,我只有一个验证代码部分。这些子表单指向数据库中的不同表。目的是,如果数据库中有关于该表单的行,表单应该从数据库中获取默认值,以便用户有机会更改该数据。如果数据库中没有一行,这种形式的输入将被插入到数据库中。首先,我可以从 db 中获取值并将它们显示为表单元素的值。但是当我改变它并尝试用
$form->getValues();
我无法访问在页面中输入(或编辑)的值,我只是重新访问数据库中默认输入的值。这个表格应该可以随时编辑,我有多个表格来处理不同类型的数据,它们也可以做同样的事情。我一定做错了什么?任何的想法?
(补充)这里是我的控制器代码相关部分的摘要:
$masterform = new Application_Form_GeneralForm(); // a class which extends Zend_Form
$form1 = new Application_Form_SmallForm(); // a class which extends Zend_Form_Subform
$masterform->addSubform($form1, 'form1');
// so far, for form 1, no problem. My second form will be
// added to the masterform after this first form is submitted,
// which works fine.
$form2 = new Application_Form_AnotherSmallForm(); // a class which extends Zend_Form_Subform
$request = $this->getRequest();
if ($request->isPost()){
if ($generalform->isValid($request->getPost())) {
$form2->loadValues(); // the part that form elements are filled with data
// taken from db, a method defined in `AnotherSmallForm`
// class. Just assigning values to elements with `setValue()`
$form2->saveValues(); // Here is the problem, another method to save the
// current values to db. (defined in form class). I have to do this in this fragment of code, so i don't know to
// use which order ( saveValues() and loadValues() methods' order )`
$masterform->addSubform($form2, 'form2');
}
}
因此,第一步:将 $form1 添加到 $masterform。
第二步:$masterform 提交(现在只包含$form1),然后将$form2 添加到$masterform。在添加之前,$form2 的值会加载到表单元素中。
第三步:$masterform 提交,($form1 和 $form2 也是如此)。如果 $form2 中的值有任何更改,则必须通过此提交在 db 中更新它们。
这是此代码的目标,由于第三步而无法完成。