Codeigniter 4.0-dev 版源码学习笔记之六——控制器
前言
其實一開始我是很糾結是否要寫控制器的源碼分析的,因為控制器的源碼太少了,少到你不相信這是一個 MVC 里的一個重頭。直覺里,大家都覺得控制器作為各個請求的“入口”,其后端應該有很多很多的代碼支撐才可以的,然而事實相反,去掉注釋后,一共才 60 行左右。
控制器之前
看控制器源碼之前,我們還是要回顧一下,控制器是怎么來的。
請大家看截圖,截圖中有兩個方法:分別是 createController 和 runController。
createController 負責把路由找到的 controller 類實例化。實例化時,可以看到 request 和 response 作為參數(shù)傳遞給了 controller 的構造方法,這也是為什么在定義 controller 時,如果定義了 __construct 方法一定要記得調(diào)用一下 parent::__construct() ,因為默認定義了 __construct 方法后會覆蓋了父類的 __construct ,所以必須明確調(diào)用父類構造方法才能執(zhí)行。
runController 是執(zhí)行控制器過程,大致思路就是把剛剛實例話的對象拿過來,執(zhí)行路由中找到的控制器方法。并且把輸出返回。
控制器
嚴格來說,這個是控制器父類的源碼。為控制器運行期間定義了一些常用的方法,如 post 參數(shù)驗證,緩存等。下面具體說一下:
11-16 行:控制器父類的屬性,這些屬性可以定義控制器本身的狀態(tài)。可以在自己定義的類中覆蓋掉這些屬性。 helpers 定義要加載的輔助方法,forceHTTPS 大于 0 時,可以指定當前設定值期間內(nèi)強制到 https 。 validator 定義要驗證的 post 內(nèi)容的規(guī)則。
18-29 行:控制器父類的構造方法,在定義控制器時如果沒定義自己的構造方法,這個方法會被默認執(zhí)行,如果定義過將會覆蓋掉這個方法,需要在構造方法的最前邊執(zhí)行 parent::__construct() 以保證這個方法中的初始化數(shù)據(jù)都能正常初始化。其中 forceHTTPS 方法是強制使用 https 協(xié)議,loadHelpers 可以默認自動加載需要的 helper 。
51-60 行: validate 方法,主要輔助驗證 post 請求過來的各個字段。形式如下:
以上源碼截取自 CI 4 官方手冊。如果覺得驗證規(guī)則那個比較亂的話,可以在 ConfigValidation.php 中自定義一個驗證組,并用以下方式驗證:
$this->validate($this->request, 'userRules')控制器之后
我們都知道,控制器會和 view 端交互,在之前的 CI 版本中,控制器會把 view load 進自己的生命周期中,直接處理 request 信息。個人也覺得這有些把 controller 的地位看得太重了。在 CI 4 中,控制器僅負責接到 view 返回的組裝的頁面字符串,并 return 回 codeigniter 核心中,由核心再處理后續(xù)事宜。
結語
本節(jié)簡單的說了說控制器的父類,源碼比較少,說的也就不多。下一節(jié)試著說說 view 。
此文可以轉載,但轉載前需要發(fā)郵件到imustgxd*sina.cn進行溝通,未溝通的均視作侵權。 轉載同時需注明鏈接,并保留此段文字。
總結
以上是生活随笔為你收集整理的Codeigniter 4.0-dev 版源码学习笔记之六——控制器的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: CSS/Compass修改placeho
- 下一篇: ios语音转码