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

CodeIgniter 開發最佳實踐:MVC、安全、性能與架構總結

     編輯:PHP 綜合知識

1. MVC 架構落地原則

  • Model(苦工): 封裝所有數據邏輯、業務規則、第三方 API 調用。Controller 僅調用 Model 方法,不處理 SQL/數組操作。
  • Controller(建築師): 接收請求、協調 Model、載入 View、處理重定向/響應。保持精簡(Fat Model, Skinny Controller)。
  • View(粉刷工): 僅包含輸出邏輯(foreach、if、echo),零業務計算。

DRY 原則: 重複代碼提取至 Library、Helper 或 Model。判斷標準:複製代碼時即為重構信號。

2. 目錄結構與部署安全

  • 將 system 和 application 移至 Web 根目錄(public_html/webroot)之外。
  • index.php 保留在 Web 根目錄,修改 $system_folder、$application_folder 為相對路徑。
  • 僅暴露 index.php、靜態資源(CSS/JS/圖片),隱藏框架核心代碼。

3. 錯誤報告與調試策略

<?php
// 生產環境 (index.php 或環境配置)
ini_set('display_errors', 'Off');
error_reporting(0);
define('MP_DB_DEBUG', false); // database.php 中 $db['default']['db_debug'] = MP_DB_DEBUG;

// 開發環境
ini_set('display_errors', 'On');
error_reporting(E_ALL);
define('MP_DB_DEBUG', true);

開發階段解決所有 Notice/Warning,上線前關閉顯示,啟用日志記錄(log_threshold)。

4. 安全三部曲:過濾、驗證、轉義

  • 輸入過濾: $this->input->post('key', TRUE) 啟用 XSS 清洗,或全局 $config['global_xss_filtering'] = TRUE(性能權衡)。
  • 驗證: 表單驗證庫 set_rules('field', 'Label', 'trim|required|xss_clean|callback_custom')。
  • 輸出轉義: View 中 html_escape($var) / htmlspecialchars()。

SQL 注入: 僅使用 Active Record / Query Builder,禁止拼接 SQL。
CSRF: CI 3 內置 $this->security->get_csrf_hash(),表單隱藏域驗證。
SPAM: 限流(IP+時間)、CAPTCHA(CI 內置 captcha helper)。

5. 數據庫與 ORM 選型

6. 性能優化實戰

緩存策略

  • 頁面緩存:$this->output->cache($minutes) 生成靜態文件。
  • 數據庫緩存:$this->db->cache_on() / cache_off() 緩存查詢結果。
  • 片段緩存:$this->cache->get()/save() (需 Cache 库) 緩存局部數據。
  • Redis/Memcached:大型項目替換文件緩存。

HTTP 頭部控制

<?php
// 禁止緩存(AJAX/動態頁)
$this->output->set_header("Cache-Control: no-store, no-cache, must-revalidate, max-age=0");
$this->output->set_header("Pragma: no-cache");

// 長期緩存(靜態資源 CSS/JS/圖片)
$this->output->set_header('Cache-Control: public, max-age=2592000'); // 30天
$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 = [];
    protected $tplExt = '.php';
    protected $header = 'templates/header';
    protected $footer = 'templates/footer';

    public function __construct() {
        parent::__construct();
        $this->data['site_name'] = config_item('site_name');
        // 開發環境開啟 Profiler
        if (ENVIRONMENT === 'development') {
            $this->output->enable_profiler(TRUE);
        }
    }

    // 統一渲染方法
    protected function _render($view, $data = []) {
        $this->load->view($this->header, $this->data);
        $this->load->view($view, array_merge($this->data, $data));
        $this->load->view($this->footer);
    }
}

子控制器繼承 MY_Controller,僅需 $this->_render('page/home') 即可自動套用 Header/Footer。

8. 核心類擴展機制

  • MY_Controller、MY_Model、MY_Loader 等 MY_* 前綴類放在 application/core/,自動替換系統同名類。
  • Library/Helper 同理,支持 MY_Form_validation 等擴展。

9. CodeIgniter 運行流程精簡

  1. index.php:定義常量、環境、引導文件。
  2. system/core/CodeIgniter.php:核心引導。
    • 載入 Benchmark、Hooks、Config、URI、Router、Output、Input、Language。
    • 檢查緩存(_display_cache),命中則直接輸出結束。
    • 載入核心基類 CI_Controller(含 Loader)。
    • Router 解析 URI 確定 Controller/Method。
    • 實例化 Controller,調用方法。

Hooks 提供 8 個切入點(pre_system, pre_controller, post_controller_constructor 等)實現 AOP。

10. 開發規範速查表

規範說明
類名PascalCase,文件名同類名 User_model.php
方法/變量snake_case
數據庫表snake_case 複數 users
視圖文件小寫下劃線 user/profile.php
配置項小寫下劃線 $config['site_name']
縮進4 空格,禁止 Tab
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved