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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

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

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

前言

其實一開始我是很糾結是否要寫控制器的源碼分析的,因為控制器的源碼太少了,少到你不相信這是一個 MVC 里的一個重頭。直覺里,大家都覺得控制器作為各個請求的“入口”,其后端應該有很多很多的代碼支撐才可以的,然而事實相反,去掉注釋后,一共才 60 行左右。

控制器之前

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

請大家看截圖,截圖中有兩個方法:分別是 createController 和 runController。

createController 負責把路由找到的 controller 類實例化。實例化時,可以看到 request 和 response 作為參數傳遞給了 controller 的構造方法,這也是為什么在定義 controller 時,如果定義了 __construct 方法一定要記得調用一下 parent::__construct() ,因為默認定義了 __construct 方法后會覆蓋了父類的 __construct ,所以必須明確調用父類構造方法才能執行。

runController 是執行控制器過程,大致思路就是把剛剛實例話的對象拿過來,執行路由中找到的控制器方法。并且把輸出返回。

控制器

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

  • 11-16 行:控制器父類的屬性,這些屬性可以定義控制器本身的狀態。可以在自己定義的類中覆蓋掉這些屬性。 helpers 定義要加載的輔助方法,forceHTTPS 大于 0 時,可以指定當前設定值期間內強制到 https 。 validator 定義要驗證的 post 內容的規則。

  • 18-29 行:控制器父類的構造方法,在定義控制器時如果沒定義自己的構造方法,這個方法會被默認執行,如果定義過將會覆蓋掉這個方法,需要在構造方法的最前邊執行 parent::__construct() 以保證這個方法中的初始化數據都能正常初始化。其中 forceHTTPS 方法是強制使用 https 協議,loadHelpers 可以默認自動加載需要的 helper 。

  • 51-60 行: validate 方法,主要輔助驗證 post 請求過來的各個字段。形式如下:

  • 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 官方手冊。如果覺得驗證規則那個比較亂的話,可以在 ConfigValidation.php 中自定義一個驗證組,并用以下方式驗證:

    $this->validate($this->request, 'userRules')

    控制器之后

    我們都知道,控制器會和 view 端交互,在之前的 CI 版本中,控制器會把 view load 進自己的生命周期中,直接處理 request 信息。個人也覺得這有些把 controller 的地位看得太重了。在 CI 4 中,控制器僅負責接到 view 返回的組裝的頁面字符串,并 return 回 codeigniter 核心中,由核心再處理后續事宜。

    結語

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

    此文可以轉載,但轉載前需要發郵件到imustgxd*sina.cn進行溝通,未溝通的均視作侵權。 轉載同時需注明鏈接,并保留此段文字。

    總結

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

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。