模型、視圖與控制器

當創建一個應用程式的時候,我們需要有一種便捷且可以簡易組織代碼的架構。和很多 web 框架類似, CodeIgniter 框架也使用了模型、視圖以及控制器的架構,即 MVC 模式。這種方式可以將資料、畫面和流程等部分,分別作為單獨的元件存放在我們的應用程式中。需要特別注意的是,可能每個人會對某個元件所擔任的角色有不同的看法,那麼,下面我們就透過這個文檔來說明這些元件所擔任的角色,如果你有不同的想法,你可以依照你的需求自由決定如何使用這些元件。

模型 主要用來管理應用程式的資料,以及幫助應用程式執行特殊的業務規則。

視圖 是一個幾乎不具邏輯的簡單的檔案,只負責展示資料給使用者。

控制器 主要扮演著程式碼黏著劑的角色,主要在視圖(或使用者的畫面)和資料儲存區之間來回的處理並整合資料。

在最一般的狀況下,控制器和模型 只是一個完成特定工作的類別。它們雖然不是你唯一可以使用的類別類型,但它們是構成整個框架的核心。我們在框架中指定 /app 資料夾來儲存他們,但你只要將他們正確地放進命名空間中,你也可以儲存在任何你想要的位置,我們稍後會更加詳細的討論。

下面我們就來一一地仔細看一下這三個主要的元件。

元件

視圖

視圖 是最簡單的檔案,通常是一個 HTML 檔案加入少量的 PHP 程式碼。視圖中的 PHP 程式碼應該盡量保持簡單,一般只是顯示一個變數的內容,或者透過循環語句將物件的資料展示在表格中。

視圖從控制器中獲取資料並展示,控制器利用變數將資料發送給 視圖,並可以將其透過簡單的 echo 指令將資料展示出來。你也可以在一個視圖中再插入視圖,這樣可以很簡單的在每個頁面上展示出通用的頁眉和頁腳。

視圖類型的檔案通常存放在 /app/Views 資料夾中,但如果在創建檔案時不按照一定的規則創建的話,會顯得我們的程式碼雜亂無章。 CodeIgniter 框架雖然沒有任何的硬性規定,但依照經驗我們會在 Views 資料夾中為每一個控制器創建一個資料夾。然後透過方法名來命名視圖。這樣之後會比較好找。 例如:User’s profile(使用者設定) ,可能會在一個名為 User 的 控制器 中顯示,並且方法的名稱為 profile,並可以將這個 視圖 檔案保存在 /app/Views/User/Profile.php 這個路徑下。

建議將這種組織程式碼的方式養成一個良好的習慣。可能有些時候,你有一些其他的需求需要以其他方式來組織程式碼,沒關係,只要 CodeIgniter 框架可以找到這個檔案,那就可以顯示它的畫面。

想更深入地了解視圖

模型

模型的主要任務是為應用程式維護單一種類的資料。例如:用戶、部落格貼文、交易資訊等。在這種情況下,模型有以下兩種工作:從資料庫中抓取或輸入資料來執行業務規則;對資料庫中的資料進行實際的保存和查詢。

對於許多開發人員而言,在確定執行哪些業務規則時會感到困惑。它只是代表著資料的任何限制和需求都由模型負責,包括在保存資料前先將原始資料統一成公司的標準,或者在資料傳給 控制器前先將資料格式化。透過把業務需求保留在模型中,可以保證你不用在多個控制器中出現重複的程式碼,避免忘了更新不同區塊的程式碼而導致出錯。

模型類型的檔案通常保存在 /app/Models 這個資料夾中,雖然它們也可以使用一個命名空間去分組,但是還是建議你將模型檔案放在這個資料夾中。

想更深入地了解模型

控制器

控制器主要擔任了幾個不同的角色。最常見的就是他們會接收使用者的請求,然後判斷這個請求應該執行什麼樣的操作。而這一過程通常會涉及到將資料發送給模型保存,或者去請求模型將資料傳遞給視圖去顯示畫面。它也可以用來載入其他程式的類別,需要的話,也可以處理模型權限之外的特殊任務。

控制器的額外任務就是用來處理和 HTTP 請求相關的所有事情 —— 重新導向、認證、Web 安全、編碼等。總而言之,控制器是你的應用程式的入口,透過控制器,存取你的應用程式的使用者才可以到達指定的地方,並獲取符合他們想要的格式的資料。

控制器通常會保存在 /app/Controllers 這個資料夾中, 雖然它們也可以使用命名空間去分組,但是還是建議你將控制器存放在這個資料夾中。

想更深入地了解控制器