2010-10-10 33 views
2

我通常在一個動作中實例化我的表單,這是我在提交時處理它們的地方。然後,我將它們傳遞到視圖並像平常一樣輸出它們。zend_form:我應該在佈局中使用一個右側

此表單(搜索框)不同,因爲它不是單個頁面的一部分。它必須在任何地方都可見。我已經將它作爲模板layout.phtml的一部分,並在那裏實例化並訪問它。

$search = new SearchForm(); 
echo $search; 

表格打印出來的不錯,但現在的問題是我在哪裏處理此表單。我通常在動作中有這樣的處理代碼..

if ($this->_request->isPost()) { 
     //and form is valid 
     //process the data    
    } 

但是由於此表單是通用的,因此沒有任何操作。我該如何處理?

我應該:

  • 爲它創建一個假動作(這是沒有意義的,因爲形式是無處不在)
  • 或者我應該把處理代碼對入layout.phtml(其我認爲是不好的MVC練習,因爲我現在正在混合處理表單和視圖)。

我該怎麼辦?對此有何建議?

+1

你是否已將窗體instatiation放在視圖中?聽起來有點奇怪。也許插件是最好的方法。此外,你可以使用queryAction來創建一個searchController來處理...你有一個sigle結果頁面嗎? – 2010-10-10 07:01:54

+0

*(相關)* [使用動作助手實現可重用廣告](http://weierophinney.net/matthew/archives/246-Using-Action-Helpers-To-Implement-Re-Usable-Widgets.html) – Gordon 2010-10-10 10:09:11

回答

5

當然,搜索將需要一些處理代碼來建立結果,所以我會創建一個通用的(如在你的IndexController上)這個動作並指向這個表單。即使表單在每個頁面上,您都可以將它指向特定的網址(如/ search /),這是完全正確的。

否則,您可以創建一個控制器插件,檢查請求以查看它是否已提交,然後運行處理代碼。

+1

我寧願創建一個專用控制器,而不是通用函數。它不會受到傷害,如果有必要,您仍然可以從那裏重定向到其他控制器。控制器插件+1。 – Gordon 2010-10-10 10:09:33

+0

是的,一個URL /控制器來處理提交。例如:如果它是出現在網站佈局中的登錄表單,則可以在'AuthController :: loginAction()'處理它。 – 2010-10-10 11:19:09

相關問題