2012-12-01 68 views
1

我遇到的問題是my_controller.php有超過1000行的代碼。雖然我沒有問題導航槽,但我想將該控制器的一部分放在其他文件中。Codeigniter:控制器太大,如何將它分成更小的塊?

的詳細信息:

我有一個包含CRUD功能(而不是模型的功能,控制功能,這意味着沒有DB查詢有)特定對象(及其子女)

控制器

現在,對於每個CRUD,我都有一個作爲控制器的函數(通過url訪問,在Create部分的情況下,它將準備一個表單),一個管理表單中數據的函數(獲取POST並將其發送到驗證,如果沒有問題,則發送數據以供進一步準備)和驗證(通過回調驗證數據)和準備(主要用於調用模型方法並將其發送給pre數據的排列數組)。

由於該控制器中所有對象的CRUD都適用於大多數相同的數據,因此它們共享許多功能。

所以我想創建一個存儲功能進行驗證,回調函數,準備等

什麼是做到這一點的最好辦法具體.PHP?

創建CRUD控制器的常用程序或良好實踐是什麼?

我希望我已經夠清楚了,我對語言和php編程的知識都非常有限。

+1

簡單的答案:爲每個子對象創建一個新的控制器。如果你想要更具體的幫助,需要看一些代碼。 –

+1

將所有您的驗證函數放入庫文件或幫助程序文件中。 – xbonez

+0

其他替代方案是使用Hooks:http://ellislab.com/codeigniter/user-guide/general/hooks.html – alditis

回答

1

你有一個「胖」控制器。一種選擇是查看可以輕鬆推送到模型的內容,以便您擁有「瘦控制器胖模型」。考慮模型的一種方式是它的數據庫表和關於如何使用這些數據的業務規則。因此,驗證和數據準備等事情可以在模型中發生。然後,控制器只需切斷並收集對象和數組。模型可以直接調用其他模型。

如果您不喜歡這種方法,或者您需要更便攜的東西,那麼請使用庫。另一件要看的事情是,如果在不同的地方需要短的位(技術術語) - 請將它們放在一個站點配置文件中。

+0

我傾向於僅將模型用於數據庫訪問。我建立我的模型,以便它不知道視圖部分。 – ignite1688846

+0

我傾向於僅將模型用於數據庫訪問。我建立我的模型,以便它不知道視圖部分。我一直在考慮將每個控制器函數(URL中調用的函數)都放在單獨的.php文件和一個子文件夾中,這使得我必須定義一些路徑等問題。 – ignite1688846

+0

只是爲了澄清 - 我並不是說模型需要了解視圖。控制器確定要調用的模型以及要發送到視圖的內容。你想把'之間'的方法,如數據驗證取決於你。 – cartalot

相關問題