2014-09-27 61 views
2

我正在使用PHP Codeigniter atm。我讀過幾篇強調「胖模型和精簡控制器」的文章,並且該模型應該處理所有的業務邏輯,讓直接處理數據庫和控制器的方法直接處理用戶輸入。遵循這些規則,似乎有必要通過控制器間接傳遞$ _POST數組數據。但有時它更直接,幾乎必須直接在控制器中處理用戶數據。關於MVC設計的建議,在控制器中生成視圖

此外,CI的form_validation類不允許您在配置文件的form_validation.php中設置自定義錯誤消息。爲此,我們需要編寫call_back方法。但是,如果我們要爲每個字段編寫call_back方法,控制器將會變得「胖」,並且爲什麼我會首先使用form_validation類。

另一件事是,有時我會發現需要根據數據庫和用戶輸入等來生成內容。但是在控制器中這樣做似乎違背了「邏輯和表示的分離」。例如,CI有一個表格和表格助手,分頁等......這些都是演示文稿。將這些寫入控制器會使控制器再次變得肥胖。所以我想我可能應該爲視圖生成編寫控制器方法,或者我應該編寫一個模型或庫來處理演示文稿?

我很感激一般的MVC方法的一些很好的建議和提示。謝謝。

+0

嗯,事情是,CodeIgniter與MVC沒什麼關係(除了用它作爲營銷工具)。至於「表單驗證」,在適當的MVC設置中,您應該(也將)能夠將表示層與模型層分開。數據來自html表單應該沒關係。驗證規則**是**業務規則的一部分。這就是爲什麼它應該發生在模型層的內部。特別是 - [域對象](http://c2.com/cgi/wiki?DomainObject)。 – 2014-09-27 19:56:43

回答

1

你可以看看它是如何在CakePHP中完成的,它們試圖更貼近MVC架構。

但有時它更直截了當,幾乎需要在控制器中直接

你幾乎從來沒有想這樣做來處理用戶數據。當控制器調用一堆模型方法時,情況會更加清晰。這會鼓勵代碼重用,因爲這樣您可以輕鬆地在另一個控制器中引用相同的模型方法。

要做到這一點,我們需要編寫call_back方法。但是,如果我們要爲每個字段編寫call_back方法,控制器將會變得「胖」,並且爲什麼我會首先使用form_validation類。

對於表單驗證,該模型具有validate財產與領域的陣列,以驗證並有所有型號的一般validates方法,檢查被保存對模型的validate屬性的數據。然後,它可以使數據中的單個字段「無效」,並將其傳遞迴顯示該字段上的錯誤的視圖。

所以我想我應該可能寫視圖生成的控制器方法,或者我應該寫一個模型或庫來處理演示?

編寫助手類。 Helper類被視爲視圖之間的共享代碼,而不是控制器的一部分。