我有一个用Zend_Form创建的表单,其中method = GET用于搜索包含以下元素的记录:
[表] 用户名[输入类型=“文本”名称=“uname”] [input type =“submit”value =“搜索”name =“search”] [/形式]
提交表单后,所有GET参数以及提交按钮值都会显示在url中。
http://mysite.com/users/search?uname=abc&search=Search
如何避免在网址中出现提交按钮值?是自定义路由解决方案吗?
答案 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不值得向网络服务器提出额外请求。