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路由巢狀程式設計
- Vlan間路由實驗(單臂路由實現法)薦路由
- 你女友都懂前端路由和react-router實現原理了,你還不懂。前端路由React
- 淺談:前端路由原理解析及實踐前端路由
- Synchronized 實現原理synchronized
- synchronized實現原理synchronized
- block實現原理BloC
- AQS實現原理AQS
- jQuery實現原理jQuery
- HashMap實現原理HashMap
- AsyncTask實現原理
- weak實現原理
- Session實現原理Session
- AOP如何實現及實現原理
- Flutter 區域性路由實現Flutter路由
- Hybris UI的Route(路由)實現UI路由
- ActiveMQ + Camel 實現訊息路由MQ路由
- react全家桶實現招聘app-路由實現(二)ReactAPP路由
- Flutter 路由原理解析Flutter路由
- 路由器工作原理路由器
- golang reflect 實現原理Golang
- synchronized 的實現原理synchronized
- Greys主要實現原理
- JAVA AQS 實現原理JavaAQS
- 理解 Block 實現原理BloC
- ReentrantLock實現原理ReentrantLock
- Lombok 原理與實現Lombok
- Vue指令實現原理Vue