2

我在我的一个项目中使用 Zend Framework 1.12。我需要在一页中使用多个表单,并在“渲染”功能的帮助下成功地放置了它们。

    $this->oneAction();
    $this->render('one');

    $this->anotherAction();
    $this->render('another');

两种形式有两种不同的操作,在我的 indexAction() 中,我像上面一样调用它们。两个动作有自己的脚本,这段代码非常适合在一个页面中放置 2 个表单。

问题是;2个不同的表单,有自己的提交按钮(不同的名称),当提交第二个表单时,页面重新加载(自然),但是第一个表单的字段中的值丢失了..我写了一个函数来加载一些默认值(对于第一种形式的某些字段,取自 db),然后它获取值,但给出错误(值是必需的并且不能为空),即使它们由我的函数填充。我必须创建一个包含许多表单的复杂页面,并且无法解决这个问题。我想为这个问题找到一个解决方案,或者只是对 Zend Form 对这些多个表单提交的行为知之甚少。

(关于这些问题有很多页面,但大多数只是考虑在同一页面中放置多个表单,仅此而已..)

提前致谢..

4

1 回答 1

2

您需要利用 Zend 的子表单。表单和子表单在 ZF 中实际上是相同的,主要区别在于表单装饰器的使用。将所有表单视为可以组合成单个表单的子表单会更强大。以下代码提供了一个示例:

class My_Master_Form extends ZendX_JQuery_Form
{   

    /**
     * combine sub forms into composite
     */
    public function  __construct($options = null)    
    {       
        parent::__construct($options);        

        // Add a sub form...
        $subform = new My_Foo_Form();       
        $subform->setElementsBelongTo('mySubForm');
        $subform->removeDecorator('Form');
        $subform->setOrder(-2);
        $this->addSubform($subform, 'mySubForm');

        ...

然后,您将呈现单个主表单。处理验证很简单。执行验证时,现有代码应遍历每个子表单。如果需要,您可以覆盖并在初始验证后查看每个子表单中的故障,如果验证逻辑跨越子表单,则根据需要进行汇总。

于 2012-11-07T16:47:53.827 回答