回答
與JS方法一樣,您可以重定向回您想要的首選URL。即讓表單通過GET提交,然後重定向到ZF路由樣式。
然而,這是過度殺傷,除非你有一個很好的理由要爲你的搜索查詢創建整潔的URL。一般而言,搜索表單應該發送一個可以加入書籤的GET查詢。在URL中,param = val樣式參數沒有問題:-)
ZF URL有點奇怪,它們強制URL參數成爲主URL的一部分。即domain.com/controller/action/param/val/param2/val而不是domain.com/controller/action?param=val & param2 = val
這並不總是你想要的,但似乎是方式框架正在與URL參數
沒有明顯的解決方案。由zf生成的表單將是一個標準的html表單。當使用瀏覽器提交得到它會導致類似
/action/specified/in/form?var1=val1&var2=var2
只有解決方案的請求得到一個「zendlike URL」(即一個/纔好?或&),將使用JavaScript來破解表單提交。例如,您可以偵聽onSubmit,中止提交併將瀏覽器重定向到已轉換的網址。我個人不相信這個解決方案值得增加複雜性,但它應該執行你正在尋找的東西。
經過一天半的肆虐,並盡我所能找出正確的方式來做到這一點相當簡單,我放棄了並做了以下。我仍然不相信沒有更好的辦法。
需要這個的用例是一個簡單的記錄列表,帶有一個用於添加一些過濾器(通過GET)的頂部表單,可能是一些列排序,並且引入Zend_Paginate以實現良好的度量。我在我的分頁部分中使用Url視圖助手遇到了問題,但我懷疑即使只是排序和過濾器形式,Zend_View_Helper_Url仍然會掉下來。
但我離題了。我的解決方案是將一個方法添加到我的基本控制器類中,該方法將任何原始查詢字符串參數與現有的zend樣式斜槓參數合併,並重定向(但僅在必要時)。該方法可以在任何不需要處理POST的操作中調用。
希望有人會發現這有用。或者更好,找到更好的方法:
/**
* Translate standard URL parameters (?foo=bar&baz=bork) to zend-style
* param (foo/bar/baz/bork). Query-string style
* values override existing route-params.
*/
public function mergeQueryString(){
if ($this->getRequest()->isPost()){
throw new Exception("mergeQueryString only works on GET requests.");
}
$q = $this->getRequest()->getQuery();
$p = $this->getRequest()->getParams();
if (empty($q)) {
//there's nothing to do.
return;
}
$action = $p['action'];
$controller = $p['controller'];
$module = $p['module'];
unset($p['action'],$p['controller'],$p['module']);
$params = array_merge($p,$q);
$this->_helper->getHelper('Redirector')
->setCode(301)
->gotoSimple(
$action,
$controller,
$module,
$params);
}
- 1. Zend框架網址問題?
- 2. Zend框架重定向列表網址
- 3. 在zend框架中訪問網址段
- 4. Zend框架獲取URL
- 5. 如何從框架中獲取網址?
- 6. Zend框架網格
- 7. 在zend框架中獲取用戶IP地址
- 8. Zend框架額外獲取PARAMS與NGINX
- 9. Zend框架:獲取一個空PARAM
- 10. 從Zend框架獲取表單輸入
- 11. Zend框架Zend_Dom_Query獲取節點文本
- 12. 獲取單選按鈕+ Zend框架
- 13. 獲取Cookie的值與Zend框架
- 14. Zend框架2重定向在onBootStrap與網站網址
- 15. Zend從文本框中獲取值並將其添加到搜索網址中
- 16. 使用zend框架組件,沒有框架,並在日食中獲取typehints
- 17. Zend框架緩存的最佳方法
- 18. Zend框架Krixton_JsonRpc_Client和呼叫方法
- 19. zend框架2 - 使用全局方法
- 20. Zend框架:資源插件vs方法
- 21. 合併Zend框架2
- 22. 填補PHP Zend框架的數組,並在視圖獲取它
- 23. Zend框架:方法「getDbTable」不存在,並沒有被困在__call()
- 24. 如何獲得像zend框架舊版本的zend框架2.3
- 25. 無法獲取文檔類型的輸出Zend框架
- 26. 使用zend框架傳遞網址上的數組2路線
- 27. Javascript或PHP或Zend框架 - 如何檢查以前的網址?
- 28. 路由Zend框架2語言的網址
- 29. 使用mod_rewrite與Zend框架,從我的網址
- 30. Zend框架:在控制器名中使用破折號/網址
+1雖然重定向似乎應該是不必要的,這似乎是要走的路。用可重複使用的控制器方法查看我的答案以獲得該行爲。 – timdev 2011-02-23 23:42:36