首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 相關知識

CodeIgniter 最佳實務指南:MVC 架構、安全、效能、模板、資料庫

     編輯:PHP 相關知識

CodeIgniter 專案最佳實務完整指南

整理 CodeIgniter 開發的核心原則與實戰技巧,涵蓋架構設計、安全防護、效能優化、模板渲染、資料庫操作等面向。

1. MVC 架構落地

  • Model:封裝所有資料存取邏輯、商業規則、驗證。控制器只呼叫 Model 方法。
  • Controller:薄控制器,只負責請求分發、參數驗證、呼叫 Model、載入 View。
  • View:純展示邏輯,禁止資料庫查詢、複雜運算。
  • DRY 原則:重複代碼提煉至 Library、Helper、Model。

2. 目錄結構與安全

/var/www/project/
├── application/      # 應用程式(放在 webroot 外最佳)
├── system/           # CI 核心(放在 webroot 外最佳)
├── public_html/      # Web 根目錄
│   ├── index.php     # 入口檔
│   ├── assets/       # CSS/JS/圖片
│   └── .htaccess     # Rewrite 規則
└── logs/             # 應用日誌(不可 Web 存取)

index.php 中設定:

$system_path = '../system';
$application_folder = '../application';

3. 錯誤報告與除錯

// application/config/database.php
$db['default']['db_debug'] = (ENVIRONMENT !== 'production');

// 入口檔或 hooks 中
if (ENVIRONMENT === 'production') {
    ini_set('display_errors', 'Off');
    error_reporting(0);
} else {
    ini_set('display_errors', 'On');
    error_reporting(E_ALL);
}

4. 安全防護清單

威脅CI 內建防護啟用方式
SQL InjectionActive Record / Query Builder使用 $this->db->where() 等方法,避免手寫 SQL
XSS全域/單點過濾$config['global_xss_filtering'] = TRUE; 或 $this->input->post('key', TRUE)
CSRFCSRF Token$config['csrf_protection'] = TRUE; 表單用 form_open()
垃圾留言/註冊CAPTCHA載入 captcha_helper,驗證 $this->input->post('captcha')

5. 資料庫與 ORM

  • Query Builder (Active Record):內建、防注入、可攜性佳
  • DataMapper (DMZ):流行 ORM,關聯模型豐富
  • Doctrine:企業級 ORM,學習曲線較陡
  • RapidDataMapper:輕量級替代方案

6. 程式碼實踐技巧

快取策略

// 網頁快取
$this->output->cache(n); // 快取 n 分鐘

// 資料庫查詢快取
$this->db->cache_on();
$query = $this->db->get('table');
$this->db->cache_off();

// 片段快取(需第三方庫或自行實作)

HTTP Header 控制

// 禁止快取 (AJAX、動態頁)
$this->output->set_header("Cache-Control: no-store, no-cache, must-revalidate");
$this->output->set_header("Pragma: no-cache");

// 長期快取 (靜態資源)
$this->output->set_header('Cache-Control: max-age=2592000');
$this->output->set_header('Expires: ' . gmdate('D, d M Y H:i:s', time()+2592000) . ' GMT');

7. 模板渲染優化:MY_Controller 基類

<?php
// application/core/MY_Controller.php
class MY_Controller extends CI_Controller {
    protected $_data = array();
    protected $_tplext = '.php';
    protected $_header = 'templates/header';
    protected $_footer = 'templates/footer';

    public function __construct() {
        parent::__construct();
        $this->_data['title'] = config_item('site_name');
        if (ENVIRONMENT === 'development') {
            $this->output->enable_profiler(TRUE);
        }
    }

    protected function _view($view, $data = array()) {
        $this->load->view($this->_header, $this->_data);
        $this->load->view($view, array_merge($this->_data, $data));
        $this->load->view($this->_footer);
    }
}

// 控制器使用
class Welcome extends MY_Controller {
    public function index() {
        $this->_data['title'] = '首頁';
        $this->_view('welcome_message');
    }
}
?>

8. 不必所有類別繼承 CI_Controller

  • Library、Model、Service 類別不需繼承
  • 透過 get_instance() 取得 CI 超級物件
  • 依賴注入傳遞所需服務,降低耦合

9. CI 載入流程理解

  1. index.php:定義路徑常數、載入 system/codeigniter/CodeIgniter.php
  2. CodeIgniter.php:載入核心類、Benchmark、Hooks、Config、URI、Router、Output
  3. 檢查快取 → 有則輸出結束
  4. 載入 Input、Language、CI_Base (Loader/Controller 基類)
  5. Router 解析控制器/方法 → 載入控制器實例 → 執行方法

10. 遷移到 CodeIgniter 4 / 現代框架考量

  • CI 3 是最後一個傳統版本,CI 4 完全重寫(PHP 7.2+、命名空間、Composer、PSR 相容)
  • 新專案建議:Laravel、Symfony、Slim、Lumen 或 CI 4
  • 舊專案維護:落實上述最佳實務、定期安全更新、規劃遷移路徑
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved