Zend framework Zend避免url中获取参数中的提交按钮值

Zend framework Zend避免url中获取参数中的提交按钮值,zend-framework,zend-form,Zend Framework,Zend Form,我有一个表单,使用Zend_表单创建,方法=GET用于搜索包含以下元素的记录: [表格] 用户名[输入类型=“text”name=“uname”] [输入type=“提交”value=“搜索”name=“搜索”] [/表格] 表单提交后,所有GET参数以及submit按钮值都将出现在url中 如何避免url中出现提交按钮值?自定义路由是解决方案吗?在表示窗体操作的控制器中,重定向到另一个(或同一个控制器)仅包括相关参数 伪代码: $params = $this->getRequest()

我有一个表单,使用Zend_表单创建,方法=GET用于搜索包含以下元素的记录:

[表格] 用户名[输入类型=“text”name=“uname”] [输入type=“提交”value=“搜索”name=“搜索”] [/表格]

表单提交后,所有GET参数以及submit按钮值都将出现在url中


如何避免url中出现提交按钮值?自定义路由是解决方案吗?

在表示窗体操作的控制器中,重定向到另一个(或同一个控制器)仅包括相关参数

伪代码:

$params = $this->getRequest()->getParams();
if isset($params['search'])
  unset($params['search']);
  return $this->_helper->Redirector->setGotoSimple('thisAction', null, null, $params);

handle form here
这与基本相同,只是您希望在不同阶段之间修改请求(通过取消设置参数),而不是执行持久性操作(Wiki页面上的图像显示将数据插入数据库)


如果我是你,我会把它留在家里。在我看来,不值得向Web服务器提出额外的请求。

当表单被提交时,其所有元素及其名称和值都将成为GET/POST查询的一部分

因此,如果您不希望某个元素出现在GET查询中,那么只需创建这个没有名称的元素。这可能不是最好的方法,但既然我们讨论的是“提交”元素,我想这并不重要

查看
Zend\u View\u Helper\u FormSubmit
Helper,您可以看到它正在创建“submit”元素并设置其名称。因此,可能的解决方案是创建自己的视图辅助对象,并使用它来呈现“submit”元素,而不是默认的辅助对象

可以使用设置自定义辅助对象

$element->setAttribs( array('helper' => 'My_Helper_FormSubmit') );

然后构建自己的表单元素类,并使用preg_replace从元素中删除name属性。它的美丽之处在于,它不会干扰其他装饰师

因此,类似这样的问题:

class My_Button extends Zend_Form_Element_Submit
{
    public function render()
    {
        return preg_replace('/(<input.*?)( name="[^"]*")([^>]*>)/', "$1$3", parent::render(), 1);
    }
}
class My\u按钮扩展了Zend\u表单\u元素\u提交
{
公共职能
{

return preg_replace('/(创建元素时,只需删除创建时自动设置的name属性即可

$submit = new Zend_Form_Element_Submit('search')->setAttrib('name', '');
或者在
Zend_表单中

// Input element
$submit = $this->createElement('submit', 'search')->setAttrib('name', '');

// Or Button element
$submit = $this->createElement('button', 'search')->setAttribs(array
(
    'name' => '', 'type' => 'submit',
);

您可以在javascript中删除提交按钮的名称属性。 jQuery示例:

$('input[name="submit"]').removeAttr('name');

我认为zend框架中可能已经存在一些代码或功能。谢谢…@adithya:你可以在搜索结果页面上有一个文本链接,上面写着“你已经搜索过了”,以保持一个干净的URL的某种功能。但是检查一下Google,例如,非常丑陋的URL。这应该是公认的正确答案(如果表格中只有一个提交)。