首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Zend_Form -同一页上的多个表单

问Zend_Form -同一页上的多个表单
EN

Stack Overflow用户
提问于 2009-07-23 10:20:27
回答 2查看 6.3K关注 0票数 1

在一个页面中有多个表单,当我提交其中一个表单时,我如何判断提交的是哪个表单?

我想过为每个from生成唯一的it,并将它们保存为隐藏字段并保存到user-session中-虽然这是一个解决方案,但它的问题是没有从会话中删除旧it的好地方。

有没有更好的办法来解决这个问题?

提前感谢!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2009-07-23 10:36:19

首先:您是否考虑过将这两个表单发送给两个不同的操作?这样,您就可以在每个操作中分别处理每个表单。如果你使用的是Zend MVC组件,这应该是“最佳实践”。

另一个选项是检查将包含在请求中的提交按钮的值,例如

代码语言:javascript
复制
<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将呈现为按钮的标签。

因此,您可能希望通过不同的提交按钮名称来区分表单:

代码语言:javascript
复制
<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和我之间的评论对话期间,以下似乎是一种可能的解决方案:

代码语言:javascript
复制
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
    }
}
票数 3
EN

Stack Overflow用户

发布于 2011-07-08 17:29:27

你代码中的一些错误,应该是这样的:

代码语言:javascript
复制
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);
    }

}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1170857

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档