CI框架原始碼閱讀:控制器Controller.php
CI框架原始碼閱讀:控制器Controller.php
最近時間有些緊,源碼閱讀系列更新有些慢。鑑於Controller中程式碼比較少,本次Blog先更新該檔案的源碼分析。
在經過路由分發之後,實際的應用Controller接管用戶的所有請求,並負責與用戶資料的交互。 CI中所有的應用控制器都應該是CI_Controller的子類別(除非你擴充了CI的核心,那麼你的Controller父類別可以是MY_Controller)。
在應用程式控制器中,我們常常會用到這樣的程式碼:
/* 加载配置文件 */ $this->load->config("config_app"); /* 加载model */ $this->load->model("user"); /* 加载视图 */ $this->load->view("index"); /* 获取post */ $this->input->post("data",true); /* 获取 get */ $this->input->get("data",true); /* 清除xss */ $this->security->xss_clean($data); /* mark时间点 */ $this->benchmark->mark("app_start");
這些是如何實現的?我們接下來就簡單追蹤一下。
儘管該類別的結構很簡單,我們還是貼出CI_Controller的類別圖:
1. _contruct() 建構函數
這裡CI做了一個處理,將所有的已經載入的元件加入CI_Controller(前面我們已經看到,is_loaded函數追蹤所有載入的元件):
foreach (is_loaded() as $var => $class) { $this->$var =& load_class($class); }
看看Controller實例化時,is_loaded追蹤的元件有哪些:
這就解釋了為什麼我們可以透過$this->input等方式來呼叫CI的元件。
這還不夠,順便把Loader也搞進來:
$this->load =& load_class('Loader', 'core'); $this->load->initialize();
現在,可以使用Loader元件來載入設定($this->load->config),載入模型($this->load->model) 和載入檢視了($this->load-> view)
CI_Controller可以說是一個持有多個元件的超級類別,這樣的方式,非常類似於設計模式中的"代理模式"。
2. &get_instance
這裡簡單解釋一下,CI_Controller是一個單例模式的類,透過get_instance()方法取得該類別的實例。 CodeIgniter.php中get_instance函數呼叫的即是此方法:
public static function &get_instance() { return self::$instance; }
以下是關於Controller的一些Hint:
1. CI中Controller中可以自訂目錄,例如在application/controller目錄中建立目錄admin,並新建IndexController,則該Controller的URL存取路徑是:
test.xq.com/admin/index/
2. Controller中不應該承擔過多的邏輯,業務邏輯應該封裝到Model中.
3. 你的Controller應該按照業務區分,例如UserController處理用戶相關的請求,而AppController處理應用的請求等,這不是原則,而只是一種方式。
4. Controller類別名稱應該以大寫字母開頭,檔案名稱應該是全小寫的形式。
5. Controller中以下劃線開頭的方法被CI認為是私有方法,不能夠被外部直接存取。
以上就是Controller的全部了。
最後,還是貼出CI_Controller的源碼:
class CI_Controller { private static $instance; /** * Constructor */ public function __construct() { self::$instance =& $this; foreach (is_loaded() as $var => $class) { $this->$var =& load_class($class); } $this->load =& load_class('Loader', 'core'); $this->load->initialize(); log_message('debug', "Controller Class Initialized"); } public static function &get_instance() { return self::$instance; } }
以上就介紹了CI框架原始碼閱讀:控制器Controller.php,包含了面向的內容,希望對PHP教學有興趣的朋友有幫助。

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

許多用戶在選擇智慧型手錶的時候都會選擇的華為的品牌,其中華為GT3pro和GT4都是非常熱門的選擇,不少用戶都很好奇華為GT3pro和GT4有什麼區別,下面就給大家介紹一下二者。華為GT3pro和GT4有什麼差別一、外觀GT4:46mm和41mm,材質是玻璃鏡板+不鏽鋼機身+高分纖維後殼。 GT3pro:46.6mm和42.9mm,材質是藍寶石玻璃鏡+鈦金屬機身/陶瓷機身+陶瓷後殼二、健康GT4:採用最新的華為Truseen5.5+演算法,結果會更加的精準。 GT3pro:多了ECG心電圖和血管及安

SpringBoot小白創建項目,掃描不到Controller一系列問題1.2.3.4.5.6.還有一個方法是在啟動服務類的入門,添加@ComponentScan(basePackages={“xxx.xxx.xx”,“xxx.xxx .xx”})裡面的是包的全限定名,可以為多個SpringBoot自訂controller無法掃描到SpringBoot自訂controller路由找不到,原因是啟動類別和自訂的Controller包不在同一級目錄下。官方建議application.java放的位

為什麼截圖工具在Windows11上不起作用了解問題的根本原因有助於找到正確的解決方案。以下是截圖工具可能無法正常工作的主要原因:對焦助手已開啟:這可以防止截圖工具開啟。應用程式損壞:如果截圖工具在啟動時崩潰,則可能已損壞。過時的圖形驅動程式:不相容的驅動程式可能會幹擾截圖工具。來自其他應用程式的干擾:其他正在運行的應用程式可能與截圖工具衝突。憑證已過期:升級過程中的錯誤可能會導致此issu簡單的解決方案這些適合大多數用戶,不需要任何特殊的技術知識。 1.更新視窗與Microsoft應用程式商店應用程

前言在某些情況下,服務的controller中前綴是一致的,例如所有URL的前綴都為/context-path/api/v1,需要為某些URL加上統一的前綴。能想到的處理辦法為修改服務的context-path,在context-path中加上api/v1,這樣修改全域的前綴能夠解決上面的問題,但存在弊端,如果URL存在多個前綴,例如有些URL需要前綴為api/v2,就無法區分了,如果服務中的一些靜態資源不想添加api/v1,也無法區分。下面透過自訂註解的方式實現某些URL前綴的統一添加。一、

第1部分:初始故障排除步驟檢查蘋果的系統狀態:在深入研究複雜的解決方案之前,讓我們先從基礎知識開始。問題可能不在於您的設備;蘋果的伺服器可能會關閉。造訪Apple的系統狀態頁面,查看AppStore是否正常運作。如果有問題,您所能做的就是等待Apple修復它。檢查您的網路連接:確保您擁有穩定的網路連接,因為「無法連接到AppStore」問題有時可歸因於連接不良。嘗試在Wi-Fi和行動數據之間切換或重置網路設定(「常規」>「重置」>「重置網路設定」>設定)。更新您的iOS版本:

php提交表单通过后,弹出的对话框怎样在当前页弹出php提交表单通过后,弹出的对话框怎样在当前页弹出而不是在空白页弹出?想实现这样的效果:而不是空白页弹出:------解决方案--------------------如果你的验证用PHP在后端,那么就用Ajax;仅供参考:HTML code

這篇文章帶大家解讀vue原始碼,來介紹一下Vue2中為什麼可以使用 this 存取各種選項中的屬性,希望對大家有幫助!

同事因為this指向的問題卡住的bug,vue2的this指向問題,使用了箭頭函數,導致拿不到對應的props。當我跟他介紹的時候他竟然不知道,隨後也刻意的看了一下前端交流群,至今最起碼還有70%以上的前端程式設計師搞不明白,今天給大家分享一下this指向,如果啥都沒學會,請給我一個大嘴巴子。
