一页有多个表单,当我提交其中一个时,我怎么知道提交了哪个?
我考虑为每个 from 生成 uniqe id,并将它们保存为隐藏字段和用户会话 - 虽然这是一个解决方案,但它的问题是没有从会话中删除旧 id 的好地方。
任何更好的想法如何解决这个问题?
提前致谢!
一页有多个表单,当我提交其中一个时,我怎么知道提交了哪个?
我考虑为每个 from 生成 uniqe id,并将它们保存为隐藏字段和用户会话 - 虽然这是一个解决方案,但它的问题是没有从会话中删除旧 id 的好地方。
任何更好的想法如何解决这个问题?
提前致谢!
首先:您是否考虑过将两种表格发送到两个不同的操作?这样,您可以在每个操作中分别处理每个表单。如果您使用 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
属性将呈现为按钮的标签。
因此,也许您想通过不同的提交按钮名称来区分表单:
<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
}
}
你的代码中有一些错误,应该是这样的:
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);
}
}