摘要:控制器嚴(yán)格來(lái)說(shuō),這個(gè)是控制器父類的源碼。在中,控制器僅負(fù)責(zé)接到返回的組裝的頁(yè)面字符串,并回核心中,由核心再處理后續(xù)事宜。此文可以轉(zhuǎn)載,但轉(zhuǎn)載前需要發(fā)郵件到進(jìn)行溝通,未溝通的均視作侵權(quán)。
前言
其實(shí)一開始我是很糾結(jié)是否要寫控制器的源碼分析的,因?yàn)榭刂破鞯脑创a太少了,少到你不相信這是一個(gè) MVC 里的一個(gè)重頭。直覺(jué)里,大家都覺(jué)得控制器作為各個(gè)請(qǐng)求的“入口”,其后端應(yīng)該有很多很多的代碼支撐才可以的,然而事實(shí)相反,去掉注釋后,一共才 60 行左右。
控制器之前看控制器源碼之前,我們還是要回顧一下,控制器是怎么來(lái)的。
請(qǐng)大家看截圖,截圖中有兩個(gè)方法:分別是 createController 和 runController。
createController 負(fù)責(zé)把路由找到的 controller 類實(shí)例化。實(shí)例化時(shí),可以看到 request 和 response 作為參數(shù)傳遞給了 controller 的構(gòu)造方法,這也是為什么在定義 controller 時(shí),如果定義了 __construct 方法一定要記得調(diào)用一下 parent::__construct() ,因?yàn)槟J(rèn)定義了 __construct 方法后會(huì)覆蓋了父類的 __construct ,所以必須明確調(diào)用父類構(gòu)造方法才能執(zhí)行。
runController 是執(zhí)行控制器過(guò)程,大致思路就是把剛剛實(shí)例話的對(duì)象拿過(guò)來(lái),執(zhí)行路由中找到的控制器方法。并且把輸出返回。
控制器嚴(yán)格來(lái)說(shuō),這個(gè)是控制器父類的源碼。為控制器運(yùn)行期間定義了一些常用的方法,如 post 參數(shù)驗(yàn)證,緩存等。下面具體說(shuō)一下:
11-16 行:控制器父類的屬性,這些屬性可以定義控制器本身的狀態(tài)??梢栽谧约憾x的類中覆蓋掉這些屬性。 helpers 定義要加載的輔助方法,forceHTTPS 大于 0 時(shí),可以指定當(dāng)前設(shè)定值期間內(nèi)強(qiáng)制到 https 。 validator 定義要驗(yàn)證的 post 內(nèi)容的規(guī)則。
18-29 行:控制器父類的構(gòu)造方法,在定義控制器時(shí)如果沒(méi)定義自己的構(gòu)造方法,這個(gè)方法會(huì)被默認(rèn)執(zhí)行,如果定義過(guò)將會(huì)覆蓋掉這個(gè)方法,需要在構(gòu)造方法的最前邊執(zhí)行 parent::__construct() 以保證這個(gè)方法中的初始化數(shù)據(jù)都能正常初始化。其中 forceHTTPS 方法是強(qiáng)制使用 https 協(xié)議,loadHelpers 可以默認(rèn)自動(dòng)加載需要的 helper 。
51-60 行: validate 方法,主要輔助驗(yàn)證 post 請(qǐng)求過(guò)來(lái)的各個(gè)字段。形式如下:
if (! $this->validate($this->request, [ "email" => "required|is_unique[users.email,id,{$userID}]", "name" => "required|alpha_numeric_spaces" ])) { return view("users/update", [ "errors" => $this->errors ]); } // do something here if successful...
以上源碼截取自 CI 4 官方手冊(cè)。如果覺(jué)得驗(yàn)證規(guī)則那個(gè)比較亂的話,可以在 ConfigValidation.php 中自定義一個(gè)驗(yàn)證組,并用以下方式驗(yàn)證:
$this->validate($this->request, "userRules")控制器之后
我們都知道,控制器會(huì)和 view 端交互,在之前的 CI 版本中,控制器會(huì)把 view load 進(jìn)自己的生命周期中,直接處理 request 信息。個(gè)人也覺(jué)得這有些把 controller 的地位看得太重了。在 CI 4 中,控制器僅負(fù)責(zé)接到 view 返回的組裝的頁(yè)面字符串,并 return 回 codeigniter 核心中,由核心再處理后續(xù)事宜。
結(jié)語(yǔ)本節(jié)簡(jiǎn)單的說(shuō)了說(shuō)控制器的父類,源碼比較少,說(shuō)的也就不多。下一節(jié)試著說(shuō)說(shuō) view 。
此文可以轉(zhuǎn)載,但轉(zhuǎn)載前需要發(fā)郵件到imustgxd*sina.cn進(jìn)行溝通,未溝通的均視作侵權(quán)。 轉(zhuǎn)載同時(shí)需注明鏈接,并保留此段文字。
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://m.hztianpu.com/yun/22957.html
摘要:版權(quán)聲明可轉(zhuǎn)載,但不論任何媒體都需要在轉(zhuǎn)載前與本人溝通,并在轉(zhuǎn)載時(shí)注明出處。的各個(gè)核心模塊以模塊名為目錄名分別存儲(chǔ)在這個(gè)目錄下。下一篇文章會(huì)涉及到和。此文可以轉(zhuǎn)載,但轉(zhuǎn)載前需要發(fā)郵件到進(jìn)行溝通,未溝通的均視作侵權(quán)。 寫在前面: 為什么選擇開發(fā)過(guò)程中的 CI 4 作為源碼解讀版本:(1)首先我選 CI 是因?yàn)樗暗姆€(wěn)定版都是相對(duì)比較輕量小巧的,而且可以認(rèn)為是簡(jiǎn)單的。(2)為什么沒(méi)有選...
摘要:行,判斷如果為空,那么返回默認(rèn)路由。行,把處理完畢后找到的返回。方法該方法是自動(dòng)按著約定規(guī)則去目錄去找路由的過(guò)程。此文可以轉(zhuǎn)載,但轉(zhuǎn)載前需要發(fā)郵件到進(jìn)行溝通,未溝通的均視作侵權(quán)。 前言 我個(gè)人覺(jué)得在當(dāng)前 MVC 流行的架構(gòu)下,要想去了解一個(gè)框架,或者是一個(gè)基于此架構(gòu)下的應(yīng)用程序,最好的入手方式就是先看路由,雖然路由不是 MVC 里的任何一個(gè),但是知道了路由的來(lái)龍去脈就知道了整個(gè)框架或者...
摘要:支持命名空間是沒(méi)有支持命名空間的。配置文件不再是簡(jiǎn)單數(shù)組了新的配置文件是以對(duì)象組織的,各個(gè)配置以對(duì)象的屬性形式暴露出來(lái)。此文可以轉(zhuǎn)載,但轉(zhuǎn)載前需要發(fā)郵件到進(jìn)行溝通,未溝通的均視作侵權(quán)。 前言 CI 為了追上大家的腳步,這次跨了一大步,盡量使用了更多的流行設(shè)計(jì)理念,甚至連 PHP 的支持版本都是從 7 開始起步的。我在之前閱讀源碼的同時(shí)也發(fā)現(xiàn)了很多變化的地方,在此把已經(jīng)發(fā)現(xiàn)的列舉出來(lái),不...
摘要:行處理視圖文件名后綴。結(jié)語(yǔ)從源碼上看,使用了原始作為模版機(jī)制使得視圖邏輯非常簡(jiǎn)單。無(wú)非也就是把視圖進(jìn)來(lái),用輸出緩沖把執(zhí)行結(jié)果拿到即可。此文可以轉(zhuǎn)載,但轉(zhuǎn)載前需要發(fā)郵件到進(jìn)行溝通,未溝通的均視作侵權(quán)。 前言 CI 的 View 沒(méi)有像 Laravel 等一些流行框架一樣設(shè)計(jì)的那么重,有自己的一套模版機(jī)制,CI 一直采用純天然的 PHP 模板形式,純天然的好處是不用再學(xué)習(xí)一套模板語(yǔ)言了,缺...
摘要:行,是否強(qiáng)制訪問(wèn)。行,嘗試處理此次請(qǐng)求,詳細(xì)見方法。至此,的執(zhí)行主流程完畢。小結(jié)是的核心文件,它被調(diào)用后,完成了諸多的主流程操作。此文可以轉(zhuǎn)載,但轉(zhuǎn)載前需要發(fā)郵件到進(jìn)行溝通,未溝通的均視作侵權(quán)。 前言 Codeigniter.php 是 CI 4 的核心所在,在這里接收并處理了 request 請(qǐng)求,安全檢查,緩存處理, URL 解析以及路由匹配,執(zhí)行過(guò)濾器,加載運(yùn)行 Controll...
閱讀 2444·2021-11-22 14:56
閱讀 1243·2019-08-30 15:55
閱讀 3270·2019-08-29 13:29
閱讀 1433·2019-08-26 13:56
閱讀 3648·2019-08-26 13:37
閱讀 620·2019-08-26 13:33
閱讀 3411·2019-08-26 13:33
閱讀 2300·2019-08-26 13:33