應用程序執行流程(官方流程圖文字版)
- index.php:前端控制器,初始化基礎常量、環境、錯誤處理、載入核心類
CodeIgniter.php。
- Router:解析
$_SERVER['REQUEST_URI'],根據 routes.php 決定調用哪個控制器/方法。
- Cache 檢查:若存在有效緩存文件,直接輸出給瀏覽器,跳過後續流程。
- Security 過濾:全局 XSS 過濾、CSRF 驗證、輸入數據清洗(
$_GET/POST/COOKIE)。
- Application Controller 載入:實例化控制器類,載入模型、庫、輔助函數等資源。
- Controller 執行:調用對應方法處理業務邏輯。
- View 渲染:載入視圖文件,生成最終 HTML。
- Cache 寫入:若啟用緩存,將輸出內容存入緩存文件。
- 輸出發送:經
Output::_display() 發送 HTTP 響應。
MVC 角色詳解
| 層 | 職責 | CI 具體實現 |
| Model | 數據結構、業務邏輯、資料庫操作 | CI_Model、Active Record、Entity/Repository(自行擴展) |
| View | 展示邏輯、模板渲染 | PHP 原生模板、$this->load->view()、支援片段視圖(header/footer) |
| Controller | 請求分發、協調 M/V、響應組裝 | CI_Controller、方法對應 URL 段、$this->load 載入資源 |
CI 的鬆耦合特性
- Model 非強制:可在 Controller 直接操作 DB,或使用 Service 層、Repository 模式。
- 核心類可擴展:
MY_Controller、MY_Model、MY_Router 等覆蓋核心行為。
- 兼容第三方庫:Composer 自動載入、
libraries/ 放置非 CI 風格類庫。
關鍵入口文件 index.php 可配置常量
define('ENVIRONMENT', 'development'); // production / testing
define('APPLICATION_FOLDER', 'application');
define('SYSTEM_FOLDER', 'system');
define('VIEW_FOLDER', '');
典型請求生命週期鉤子點
pre_system
↓
pre_controller
↓
post_controller_constructor
↓
Controller::method()
↓
post_controller
↓
display_override / _display()
↓
post_system
避坑指南
- 不要在構造函數執行重邏輯,改用
post_controller_constructor 鉤子或基類 MY_Controller::__construct()。
- 輸出前務必經
$this->output->set_output(),否則緩存、壓縮、Headers 可能失效。
- 異常處理:
show_error()、show_404()、log_message() 統一記錄。