Zend_Form的 - 同一页面上的多个形式(Zend_Form - multiple forms

2019-09-20 09:41发布

有在一个页面多种形式,当我提交他们中的一个,我该怎么告诉至极一个提交?

我想过产生潮头IDS每个从,并将其保存为隐藏字段和用户会话 - 虽然这是一个解决方案,它的问题是,有从会话删除旧的id没有好地方。

任何更好的想法如何解决这个问题?

提前致谢!

Answer 1:

首先:你有没有考虑派遣两种形式的两个不同的动作? 这样,你可以在每一个动作分别处理每个窗体。 这应该是“最好的初步实践”,如果你使用Zend MVC组件。

另一种选择是,以检查将被包括在请求中,例如,提交按钮的值

<input type="submit" name="save" value="form1" />
// in PHP:
// $_POST["save"] will contain "form1"

<input type="submit" name="save" value="form2" />
// in PHP:
// $_POST["save"] will contain "form2"

要小心,因为value -attribute将呈现为按钮的标签。

所以,也许你想distingush由不同的提交按钮名称的形式:

<input type="submit" name="save-form1" value="Submit" />
// in PHP:
// $_POST["save-form1"] will contain "Submit"

<input type="submit" name="save-form2" value="Submit" />
// in PHP:
// $_POST["save-form2"] will contain "Submit"

编辑:

在OP和我之间的评论,对话在接下来的似乎是一个可能的解决方案:

class My_Form_Base extends Zend_Form
{
    private static $_instanceCounter = 0;

    public function __construct($options = null)
    {
        parent:: __construct($options);

        self::$_instanceCounter++;
        $this->addElement('hidden', 'form-id', 
            sprintf('form-%s-instance-%d', $this->_getFormType(), self::$_instanceCounter);
    }

    protected _getFormType()
    {
        return get_class($this);
    }
}

class My_Form_Type1 extends My_Form_Base
{
    public function init()
    {
        // more form initialization
    }
}

class My_Form_Type2 extends My_Form_Base
{
    public function init()
    {
        // more form initialization
    }
}


Answer 2:

在你的代码的一些错误,shoudl是这样的:

class Application_Form_Idee_Base extends Zend_Form
{
    private static $_instanceCounter = 0;

    public function __construct($options = null)
    {
        parent::__construct($options);

        self::$_instanceCounter++;
        $this->addElement('hidden', 'form-id', array(
            'value' => sprintf('form-%s-instance-%s', $this->_getFormType(), self::$_instanceCounter))
        );
    }

    protected function _getFormType()
    {
        return get_class($this);
    }

}


文章来源: Zend_Form - multiple forms on same page