理解PHP中的MVC程式設計之控制器

2021-08-30 16:15:15 字數 1693 閱讀 3127

簡單來講,控制器的作用就是接受請求。它使用獲取的方法,在這裡是通過uri,載入乙個功能模組來重新整理或者提交乙個表述層。控制器將使用$_get自動全域性變數來判斷載入哪乙個模組。

乙個請求的例子,看起來像這樣:

這看起來很簡單,但是在實現的過程中卻不是。這裡是幾個控制器能識別的argument部分:

module定義了使用哪乙個模組,如users模組

class定義了使用哪乙個功能類,如你想讓使用者login還是logout

event定義了使用哪乙個具體事件

這樣乙個更複雜的例子可以解釋上面的各個argument最終組成的請求url:

這段請求告訴控制器應該載入users模組,然後是login類,最後因為沒有定義具體事件,所以執行login::__default()預設事件。

以下是具體**部分:

如果你覺得上面例子講到的請求url讓你覺得不舒服的話,那麼就用mod_rewrite來實現友好url吧。接下來是作者給這個框架寫的實際重寫標準**:

rewriteengineon

#changetheuriheretowhateveryouwantyourhomepagetobe

rewriterule^/$/index.php?module=welcome[l,qsa]

#changes/index.php?module=welcometo/welcome

rewritecond%/%!-d

rewritecond%/%!-f

rewriterule^/([^/]*)$/index.php?module=$1[l,qsa]

#changes/index.php?module=users&class=loginto/users/login

rewritecond%/%!-d

rewritecond%/%!-f

rewriterule^/([^/]*)/([^/]*)$/index.php?module=$1&class=$2[l,qsa]

#changes/index.php?module=users&class=login&event=foo

#to/users/login/foo.html

rewritecond%/%!-d

rewritecond%/%!-f

rewriterule^/([^/]*)/([^/]*)/([^/]*).html$\

/index.php?module=$1&class=$2&event=$3[l,qsa]

extendingthecontroller

【擴充套件控制器】

擁有乙個集中控制器的一點好處就是你加入一些功能後,馬上就能通過控制器體現出來。以下是幾個可以擴充套件一下這個控制器的點子,使這個框架的整體能力更加強大:

你可以使用php5裡乙個新東西soapserver來自動檢測乙個請求是否為soap

你可以使用控制器來過濾所有的自動全域性變數如$_get和$_post以防止惡意html**等

你可以使用控制器即時地轉換表述層,比如從預設的方式轉到pdf方式

你可以直接在控制器中加入快取機制,這樣的好處是應用程式整體都能使用到快取以提高效率

當然,需要注意一點的是,你在控制器中所增加的功能將體現在程式全域性。如你想過濾所有的自動全域性變數,但是很多應用程式的管理員需要使用到一些html**,反而成為一件棘手的事情(譯者注:本人的想法是可以加乙個if條件語句,在載入特定模組時不應用過濾功能即可)。

理解PHP中的MVC程式設計之MVC框架簡介

什麼是mvc?mvc是乙個可以讓你把 三個部分 即mvc的全稱,model view controller 諧調地組成乙個複雜應用程式的概念。一輛汽車就是乙個在現實生活中非常好的mvc例子。我們看車都看兩個view 顯 示 部分 內部和外部。而這兩個都離不開乙個controller 控制者 司機。剎...

理解PHP中的MVC框架程式設計

什麼是mvc mvc是乙個可以讓你把 三個部分 即mvc的全稱,model view controller 諧調地組成乙個複雜應用程式的概念。一輛汽車就是乙個在現實生活中非常好的mvc例子。我們看車都看兩個view 顯 示 部分 內部和外部。而這兩個都離不開乙個controller 控制者 司機。剎...

iOS中MVC的理解

mvc就是models views controllers model 模型 代表著你的應用程式是什麼,與使用者介面無關 controller 控制器 controller控制view如何把model 資料模型 顯示出來,是連通model和view的橋梁 view 檢視 就是顯示給使用者的那一部分 ...