2010-09-10 27 views
3

我有一個表格,由Zend_Form生成,與方法= GET用於搜索與元件記錄如下:的Zend避免在GET參數提交按鈕值在URL

[表格] 用戶名[INPUT TYPE =」文本」名稱=‘UNAME’] [輸入類型=‘提交’價值=‘搜索’NAME =‘搜索’] [/表格]

表格後提交的所有GET參數一起提交按鈕價值出現在網址中。

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

如何避免提交按鈕值出現在網址是什麼?定製路由解決方案?

回答

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不值得向Web服務器提出額外的請求。

+0

我認爲zend框架中可能存在一些已經存在的代碼或功能。謝謝.... – adithya 2010-09-10 16:21:48

+0

@adithya:您可以在搜索結果頁上始終有一個文字鏈接,標明「您已經搜索了dogs」以保留某種乾淨網址的功能。但請檢查Google,例如非常難看的網址。 – chelmertz 2010-09-10 21:13:28

3

當表單被提交時,其所有元素及其名稱和值都成爲GET/POST查詢的一部分。因此,如果你不想讓一個元素出現在你的GET - 查詢中,你所要做的就是創建這個沒有名字的元素。這可能不是最好的方法,但是因爲我們在談論'提交'元素,所以我想這並不重要。

看着Zend_View_Helper_FormSubmit助手,你可以看到它正在創建'submit'元素並設置它的名字。所以,可能的解決方案是創建自己的視圖助手,並使用它來呈現'submit'元素而不是默認助手。

您可以設置自定義的助手與

$element->setAttribs(array('helper' => 'My_Helper_FormSubmit')); 
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); 
    } 
} 
4

當你創建你的元素,你可以簡單地刪除name屬性自動設定在創建

$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', 
); 
+0

這應該是被接受的正確答案(如果只有一個表單提交)。 – Armin 2015-02-09 09:40:24

1

您可以在javascript中刪除用於提交按鈕的名稱屬性。 jQuery示例:

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