模型,視圖和控制器?
當(dāng)創(chuàng)建一個(gè)應(yīng)用的時(shí)候,我們需要找到一種組織代碼的方法,使其易于找到正確的文件并且易于維護(hù)。和很多 Web 框架類似, CodeIgnite 框架也使用了模型、視圖、控制器結(jié)構(gòu),即 MVC 模式,來(lái)組織接著代碼文件。這種方式可以將數(shù)據(jù),展示部分和流程部分分別作為單獨(dú)的部分存放在我們的應(yīng)用中。需要注意的是,對(duì)于每一個(gè)元素的所擔(dān)任的角色會(huì)有很多種看法,本文描述了我們對(duì)此的看法。如果你有不同的看法,則可以根據(jù)需要隨意修改使用方式。
模型 主要用來(lái)管理應(yīng)用的數(shù)據(jù), 根據(jù)應(yīng)用的特殊業(yè)務(wù)規(guī)則獲取數(shù)據(jù)。
視圖 是一個(gè)沒(méi)有或者少量邏輯的簡(jiǎn)單的文件, 它只負(fù)責(zé)將數(shù)據(jù)展示給用戶。
控制器 主要承擔(dān)了膠水代碼的功能, 它主要在視圖層和數(shù)據(jù)存儲(chǔ)之間來(lái)回的處理并整合數(shù)據(jù)。
在最簡(jiǎn)單的情況下,控制器和模型只是一個(gè)完成特定工作的類。他們雖然不是你可以使用的唯一類的類型,但他們是構(gòu)成整個(gè)框架的核心。你也可以將控制器和模型文件存儲(chǔ)在任何你需要的位置,但是 CodeIgnite 框架在 /app 目錄中為我們指定了存儲(chǔ)目錄。我們將在之后進(jìn)行詳細(xì)討論。
下面我們就來(lái)看一下這三個(gè)主要組成部分。
組成?
視圖?
視圖是最簡(jiǎn)單的文件,一個(gè)視圖文件通常是一個(gè)HTML文件加入少量的PHP代碼。視圖中的PHP代碼應(yīng)該盡可能的簡(jiǎn)單,一般只是顯示一個(gè)變量?jī)?nèi)容,或者通過(guò)循環(huán)語(yǔ)句將數(shù)據(jù)輸出在表格中展示出來(lái)。
視圖從控制器中獲取數(shù)據(jù)并展示——控制器將數(shù)據(jù)發(fā)送給視圖,視圖通過(guò)簡(jiǎn)單的 echo
調(diào)用將數(shù)據(jù)展示出來(lái)。你也可以在一個(gè)視圖中插入展示其他視圖,這樣可以很簡(jiǎn)單的在每個(gè)頁(yè)面上展示出公共的頁(yè)眉和頁(yè)腳。
視圖文件通常存放在 /app/Views 目錄下,如果在創(chuàng)建文件時(shí)不按照一定的規(guī)則創(chuàng)建的話,會(huì)顯得我們的代碼雜亂無(wú)章。 CodeIgnite 框架雖然沒(méi)有規(guī)定任何的規(guī)則,但通過(guò)經(jīng)驗(yàn)我們規(guī)定在 Views 目錄下創(chuàng)建一個(gè)新的目錄對(duì)應(yīng)每個(gè)控制器。然后通過(guò)方法名來(lái)命名視圖。這樣就會(huì)使我們之后查找起來(lái)更加容易。例如:用戶配置
可能會(huì)顯示在一個(gè)名為 User
的控制器中,并且方法名稱為 profile
,你就可以將該視圖文件保存在 /app/Views/User/Profile.php 這個(gè)路徑下,并這樣命名。
這種良好的組織代碼方式建議養(yǎng)成一個(gè)習(xí)慣。可能有些時(shí)候,你有一些其他需求需要以其他方式來(lái)組織代碼,沒(méi)關(guān)系,只要CodeIgnite框架可以找到這個(gè)文件,這個(gè)視圖就會(huì)被顯示。
模型?
對(duì)于許多開(kāi)發(fā)人員而言,在確定執(zhí)行哪些業(yè)務(wù)規(guī)則時(shí)會(huì)困惑。模型的主要任務(wù)是給應(yīng)用維護(hù)單一類型的數(shù)據(jù)。比如:用戶,博客內(nèi)容,交易信息等。所以,模型的工作有以下兩種,對(duì)數(shù)據(jù)進(jìn)行采集或者放入數(shù)據(jù)庫(kù)中執(zhí)行業(yè)務(wù)規(guī)則;檢索數(shù)據(jù)并將數(shù)據(jù)庫(kù)中的數(shù)據(jù)讀取出來(lái)。也就是進(jìn)行數(shù)據(jù)的增刪改查的操作。
數(shù)據(jù)的任何限制和要求都由模型層承擔(dān),包括在保存數(shù)據(jù)前將原始數(shù)據(jù)初始化,或者在數(shù)據(jù)傳給控制器前將數(shù)據(jù)格式化。這樣可以保證你可以不用在多個(gè)控制器中出現(xiàn)重復(fù)代碼,或者出錯(cuò)。
模型類型的文件保存在 /app/Models 這個(gè)目錄下,雖然他們也可以使用一個(gè)命名空間分組,但是還是建議你將模型文件放在這個(gè)目錄下。
控制器?
控制器主要承擔(dān)了幾個(gè)不同的角色。最常見(jiàn)的就是他們會(huì)接收用戶的請(qǐng)求,然后判斷這個(gè)請(qǐng)求應(yīng)該執(zhí)行什么樣的操作。而這一過(guò)程通常會(huì)涉及到將數(shù)據(jù)發(fā)送給模型層保存,或者去請(qǐng)求模型層的數(shù)據(jù)返回給視圖。控制器也會(huì)用來(lái)加載其他應(yīng)用程序請(qǐng)求的除模型參與的任務(wù)。
控制器的林外的任務(wù)就是用來(lái)處理和 HTTP 請(qǐng)求相關(guān)的所有事情——重定向、認(rèn)證, Web 安全,編碼等??傊?,控制器是你的應(yīng)用程序的入口,通過(guò)控制器訪問(wèn)你的應(yīng)用的用戶才可以到達(dá)指定的地方并獲取他們想要的數(shù)據(jù)使用格式。
控制器通常會(huì)保存在 /app/Controllers 這個(gè)路徑下, 雖然你也可以使用命名空間分組,但是還是建議你將控制器存放在該目錄下。