codeigniter路由實現原理
CI 的工作流程圖
- 首先了解一下CI的整體工作流程 點選檢視
載入檔案順序
- 使用者輸入:http://stblog.loc/index.php/feed/12
- 首先載入入口檔案:index.php
- 定義使用環境(ENVIRONMENT),框架路徑(system_path,BASEPATH),應用目錄(application_folder),應用路徑(APPPATH)等,載入(require)CI核心檔案。
- 載入
BASEPATH/core/CodeIgniter.php
,系統初始化檔案,整個框架最核心
的部分,在此載入(load)了一系列的base class。- 載入
BASEPATH/core/Common.php
,common檔案包含一系列的基礎和公共函式 ,供全域性使用,例如load_class(),get_config()等 。 - 載入
BASEPATH/core/Benchmark.php
, 這是一個基準測試類,預設標註了應用各個階段的執行點,以得到其執行時間。也允許你自己定義監測點。 - 載入
BASEPATH/core/Hooks.php
CI_Hooks是一個鉤子類,是框架進行擴充套件的核心,能夠在程式允許的各個階段插入掛鉤點,執行你自定義的類,函式等 - 載入
BASEPATH/core/Config.php
配置檔案。 - 載入
BASEPATH/core/URI.php
URI類幫助你解析請求的uri,並提供分割uri的函式集合,供Router類使用 - 載入
BASEPATH/core/Router.php
, 路由類,即通過請求的uri,和使用者配置的路由(APPPATH/config/routes.php),將使用者請求分發到指定的Controller例項中某一action函式中。 - 載入
BASEPATH/core/Output.php, BASEPATH/core/Input.php
, 輸入類,即處理請求的輸入引數,提供安全的獲取方式。輸出類將最後的執行結果傳送出去,它還負責快取的功能。 - 載入
BASEPATH/core/Controller.php
控制器基類,用單例模式
對外提供例項,整個應用程式的心臟
。它是一個Super Object,在應用內載入的類都可以成為控制器的成員變數,這一點非常重要。 - APPPATH/controllers/$RTR->fetch_directory().$RTR->fetch_class().'.php',通過路由功能,得到控制器名,例項化真正的控制器類(子類)
- call_user_func_array 呼叫處理函式,通過路由,得到action函式名,呼叫 Controller->action()函式,處理應用邏輯,實際業務處理邏輯便是在action函式中寫的
- $OUT->_display() 將內容輸出。
- 載入
以上步驟中在 BASEPATH/core/CodeIgniter.php
中的
$RTR =& load_class('Router', 'core');
$RTR->_set_routing();
- 首先載入Router類然後呼叫其中的_set_routing()方法。
- 在該方法中首先把使用者在config目錄中設定的
route.php的$route路由陣列取出來。 - 通過$route中配置的路由規則,使用
_parse_routes()
方法拆分出$this->uri->segments中的控制器,方法,引數,將真正需要訪問
的類和方法存入$this->class,和$this->method。 - 最後在CodeIgniter.php中
$class = $RTR->fetch_class();
$method = $RTR->fetch_method();
$CI = new $class();
- 這兩個方法就是從Router類中已過了一系列url過濾,路由規則獲取的$this->class,$this->method。
- 然後初始化這個$class,就實現了從一個帶有路由規則的URL到進入框架的一系列具體實現過程。
相關文章
- 前端路由實現原理前端路由
- 前端路由實現原理(history)前端路由
- 前端路由的實現原理前端路由
- http 框架的路由實現原理HTTP框架路由
- 前端路由的原理和實現前端路由
- 單頁面路由原理及實現路由
- 前端路由原理解析和實現前端路由
- SPA路由實現的基本原理路由
- 前端路由簡介以及vue-router實現原理前端路由Vue
- vue 單頁應用(spa)前端路由實現原理Vue前端路由
- 06 . Vue路由簡介,原理,實現及巢狀路由,動態路由,程式設計式導航Vue路由巢狀程式設計
- 你女友都懂前端路由和react-router實現原理了,你還不懂。前端路由React
- CI(CodeIgniter)框架下使用非自帶類庫實現郵件傳送框架
- 淺談:前端路由原理解析及實踐前端路由
- block實現原理BloC
- ReentrantLock實現原理ReentrantLock
- synchronized實現原理synchronized
- AsyncTask實現原理
- jQuery實現原理jQuery
- Synchronized 實現原理synchronized
- Condition實現原理
- AQS實現原理AQS
- LinkedList實現原理
- Flutter 區域性路由實現Flutter路由
- Hybris UI的Route(路由)實現UI路由
- AOP如何實現及實現原理
- codeigniter學習1
- CodeIgniter基本介面apiAPI
- CodeIgniter框架之模型框架模型
- react全家桶實現招聘app-路由實現(二)ReactAPP路由
- Flutter 路由原理解析Flutter路由
- 路由器工作原理路由器
- DIY 實現 ThinkPHP 核心框架 (三)路由PHP框架路由
- vue2.0 實現路由守衛Vue路由
- SAP Commerce的路由實現(Route Implementation)路由
- MySQL——索引實現原理MySql索引
- Greys主要實現原理
- Spring AOP實現原理Spring
- (201)Atomic*實現原理