2012-10-03 61 views
0

我在Zend(後端的SOLR)中實現了一個搜索表單。 爲了給用戶提供更多的控制,我添加了一個multicheckbox來應用某些內容過濾器。Zend_Form和RESTful HTTP請求

的事情是在下面的步驟(承擔與我在這裏):

  1. 的請求時,類似的東西/search/?q=bla&filter=1

  2. 請求在控制器重寫,寧靜以:/search/query/bla/filter/1

  3. 如果用戶移除過濾器1,增加了過濾器2和提交請求變爲:/search/query/bla/filter/1?q=bla&filter=2

我該如何正確創建一個使用它的安寧請求。這裏使用Controller的getRequest()函數的問題也會得到第一個過濾器的值,這意味着我無法知道哪一個可以丟棄。


所以,總結: 如何正確使用Zend_Form的創建RESTful HTTP請求

回答

1

IMO,你要解決一個不存在的問題。您正在研究美學而不是RESTful合規性。

REST告訴你需要識別資源,而不是你的資源鏈接應該看起來很好(很好)。但是由於您的搜索是一種過濾器,因此可以接受使用QueryParam的完全

我認爲,您在REST中使用術語「搜索」是錯誤的。搜索不是資源(至少在你的情況下)。

您應該隱藏做喜歡的事,搜索執行:

GET /articles?q=foo&filter=1 

您構建您的過濾器的標準不應該的問題的方式。

或者你可能想要定義一個「搜索」作爲一種資源(實際上這樣做IIRC)。

POST /articles/search/ 
"{ 
    "query" : "foo", 
    "filter" : "bar" 
}" 

會導致類似:

Location: /articles/search/a125f41fbc135d 

哪裏a125f41fbc135d是將用於識別搜索資源搜索的標識。

+0

感謝您的詳細回覆。第一個解決方案是我使用的Zend_Paginator重新創建了URL,這意味着我以'?q ='的形式丟失了​​GET請求,它們一起被它替換爲URL控制器/ action/page /號碼 - 我會怎麼做? (在paginationcontrol視圖中,它使用$ this-> url('page'=> $ this-> next)生成URL。 –