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

CodeIgniter 擴展核心控制器與模型實作筆記

     編輯:PHP 相關知識

CodeIgniter 擴展核心控制器與模型實作筆記

CodeIgniter 允許透過 application/core/ 覆寫核心類別,本文記錄如何建立基底控制器統一處理驗證,以及模型命名與載入規範。

1. 擴展核心控制器

建立 application/core/MY_Controller.php

<?php
defined('BASEPATH') OR exit('No direct script access allowed');

class MY_Controller extends CI_Controller {
  public function __construct() {
    parent::__construct();
    // 統一邏輯:登入驗證、權限檢查、共用資料載入
    if (!$this->session->userdata('user_id')) {
      redirect('auth/login');
    }
    $this->data['current_user'] = $this->user_model->get($this->session->userdata('user_id'));
  }
}
?>

設定前綴 config.php

$config['subclass_prefix'] = 'MY_'; // 預設即為 MY_,可自訂如 'APP_'

控制器繼承 MY_Controller

class Dashboard extends MY_Controller {
  public function index() {
    $this->load->view('dashboard', $this->data);
  }
}

2. 模型規範與使用

檔案命名

  • 檔名:application/models/User_model.php(全小寫 + _model 後綴)。
  • 類名:class User_model extends CI_Model(首字大寫)。

範例模型

class User_model extends CI_Model {
  public function getAll() {
    return $this->db->get('users')->result();
  }
  public function get($id) {
    return $this->db->get_where('users', ['id'=>$id])->row();
  }
}

控制器載入模型

public function index() {
  // 方式一:標準載入
  $this->load->model('User_model');
  $users = $this->User_model->getAll();

  // 方式二:指定別名(避免命名衝突)
  $this->load->model('User_model', 'user');
  $users = $this->user->getAll();

  // 方式三:自動載入(config/autoload.php)
  // $autoload['model'] = ['User_model'];
}

注意事項

  • 模型中可直接使用 $this->db、$this->input、$this->session 等超級物件屬性。
  • 建議所有模型加上 _model 後綴,與控制器、資源庫類別區分。
  • 核心擴展類別放置於 application/core/,對應 system/core/ 結構。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved