CodeIgniter 允許透過 application/core/ 覆寫核心類別,本文記錄如何建立基底控制器統一處理驗證,以及模型命名與載入規範。
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_'
class Dashboard extends MY_Controller {
public function index() {
$this->load->view('dashboard', $this->data);
}
}
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/ 結構。