日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Codeigniter 4.0-dev 版源码学习笔记之六——控制器

發(fā)布時(shí)間:2023/12/20 编程问答 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Codeigniter 4.0-dev 版源码学习笔记之六——控制器 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

前言

其實(shí)一開始我是很糾結(jié)是否要寫控制器的源碼分析的,因?yàn)榭刂破鞯脑创a太少了,少到你不相信這是一個(gè) MVC 里的一個(gè)重頭。直覺里,大家都覺得控制器作為各個(gè)請(qǐng)求的“入口”,其后端應(yīng)該有很多很多的代碼支撐才可以的,然而事實(shí)相反,去掉注釋后,一共才 60 行左右。

控制器之前

看控制器源碼之前,我們還是要回顧一下,控制器是怎么來的。

請(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í)行控制器過程,大致思路就是把剛剛實(shí)例話的對(duì)象拿過來,執(zhí)行路由中找到的控制器方法。并且把輸出返回。

控制器

嚴(yán)格來說,這個(gè)是控制器父類的源碼。為控制器運(yùn)行期間定義了一些常用的方法,如 post 參數(shù)驗(yàn)證,緩存等。下面具體說一下:

  • 11-16 行:控制器父類的屬性,這些屬性可以定義控制器本身的狀態(tài)。可以在自己定義的類中覆蓋掉這些屬性。 helpers 定義要加載的輔助方法,forceHTTPS 大于 0 時(shí),可以指定當(dāng)前設(shè)定值期間內(nèi)強(qiáng)制到 https 。 validator 定義要驗(yàn)證的 post 內(nèi)容的規(guī)則。

  • 18-29 行:控制器父類的構(gòu)造方法,在定義控制器時(shí)如果沒定義自己的構(gòu)造方法,這個(gè)方法會(huì)被默認(rèn)執(zhí)行,如果定義過將會(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)求過來的各個(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è)。如果覺得驗(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è)人也覺得這有些把 controller 的地位看得太重了。在 CI 4 中,控制器僅負(fù)責(zé)接到 view 返回的組裝的頁面字符串,并 return 回 codeigniter 核心中,由核心再處理后續(xù)事宜。

    結(jié)語

    本節(jié)簡單的說了說控制器的父類,源碼比較少,說的也就不多。下一節(jié)試著說說 view 。

    此文可以轉(zhuǎn)載,但轉(zhuǎn)載前需要發(fā)郵件到imustgxd*sina.cn進(jìn)行溝通,未溝通的均視作侵權(quán)。 轉(zhuǎn)載同時(shí)需注明鏈接,并保留此段文字。

    總結(jié)

    以上是生活随笔為你收集整理的Codeigniter 4.0-dev 版源码学习笔记之六——控制器的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。