Zend避免在url中的GET参数中提交按钮值

时间:2010-09-10 05:03:38

标签: zend-framework zend-form

我有一个用Zend_Form创建的表单,其中method = GET用于搜索包含以下元素的记录:

[表] 用户名[输入类型=“文本”名称=“uname”] [input type =“submit”value =“搜索”name =“search”] [/形式]

提交表单后,所有GET参数以及提交按钮值都会显示在url中。

http://mysite.com/users/search?uname=abc&search=Search

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

5 个答案:

答案 0 :(得分:4)

创建元素时,只需删除在创建时自动设置的名称属性

$submit = new Zend_Form_Element_Submit('search')->setAttrib('name', '');

或在Zend_Form

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

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

答案 1 :(得分:3)

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

因此,如果您不希望在GET查询中出现元素,那么您需要做的就是创建没有名称的元素。这可能不是最好的方法,但由于我们谈论的是'submit'元素,我想这并不重要。

查看Zend_View_Helper_FormSubmit帮助器,您可以看到它正在创建'submit'元素并设置其名称。因此,可能的解决方案是创建自己的视图助手,并使用它来呈现'submit'元素而不是默认助手。

您可以使用

设置自定义帮助程序
$element->setAttribs( array('helper' => 'My_Helper_FormSubmit') );

答案 2 :(得分:1)

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

所以这样的事情:

class My_Button extends Zend_Form_Element_Submit
{
    public function render()
    {
        return preg_replace('/(<input.*?)( name="[^"]*")([^>]*>)/', "$1$3", parent::render(), 1);
    }
}

答案 3 :(得分:1)

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

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

答案 4 :(得分:0)

在代表表单操作的控制器中,重定向到仅包含相关参数的另一个(或同一个控制器)。

伪代码:

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

handle form here

这与Post/Redirect/Get基本相同,只是你想在不同阶段之间修改请求(通过取消设置参数),而不是做一些持久的事情(该Wiki页面上的图像显示插入数据进入数据库)。

如果我是你,我会留下它.IMO不值得向网络服务器提出额外请求。