2010-08-09 72 views
3

我一直使用模型作爲或多或少存儲和執行數據庫查詢的東西。我聽說過胖的模型,瘦身控制器的概念。CodeIgniter模型應該怎麼做?

我現在設置我的模型的方式在控制器中導致了很多垃圾,例如驗證表單,格式化數據等。表單驗證,文件上傳和數據格式屬於控制器還是模型?

我意識到這個問題是主觀的,應該創造一些好的討論而不是具體的答案。

回答

3

表單驗證絕對應該是模型的一部分。我通常將每個表格都表示爲一個模型,並將其傳遞給已過濾的帖子/獲得參數。然後,該模型可以根據輸入採取任何必要的操作,並使用屬性(可選地使用getter)來指示成功或失敗。在僞代碼,你希望它看起來是這樣的:

class Controller 
{ 
    function action() 
    { 
     $input = new Input(); 
     $form = new FormModel($input); 
     if ($errors = $form->errors()) 
     { 
      //load the appropriate view for the errors 
     } 
     else 
     { 
      //load the appropriate view for success with an optional redirect 
     } 
} 
+1

我覺得這個庫可以幫助http://frankmichel.de/formgenlib/user_guide/introduction/getting_started.html – Keyo 2010-08-09 04:44:51

+0

@keyo - 這是我的抱怨與CI的一個。它要求您在控制器中提供關於表單(字段,標籤,驗證要求)的所有信息。這是不對的。如果你不想看到一個好的PHP MVC框架,請檢查Kohana。 – aaronasterling 2010-08-09 05:04:37

+0

我希望我可以使用kohana或者具有良好建築的東西,但是我因爲工作而被困在CI中。 雖然我可以使用一些ORM引擎進行設置。 – Keyo 2010-08-09 06:48:08

0

的模型是什麼樣的數據(通常是一個數據庫)進行交互。控制器使用模型來訪問數據。

3

你有兩條主要道路可走。薄控制器/胖模型或胖控制器/瘦模型。基本上是你把大部分的互動。我更願意在模型中保留代碼的主要部分。這樣,代碼在幾乎每個控制器和/或庫中都可用。如果代碼保留在控制器中,則很難(但不是不可能)在其他控制器中使用它。

事情lije驗證和其他常見任務應該在一個庫或幫助。你可以製作一套「工作人員」(這是我給他們的名字)來完成繁重的工作。此外,CI擁有很多來自CI團隊和社區的現成libs和助手。圍繞wiki來查找可用的豐富信息。

希望這有助於 Vx的