所有控制器繼承基底,集中:通用 Library/Helper 載入、權限檢查、模板佈局、錯誤處理、日誌記錄等橫切關注點。
class MY_Controller extends CI_Controller {
public function commonUtil() { ... } // 危險!可透過 /my_controller/commonutil 存取
}
解決:改用 protected 或 private,或移至 Library/Service。
class MY_Controller extends CI_Controller {
public function __construct($module = 'frontend') {
parent::__construct();
switch ($module) {
case 'admin':
$this->load->library('admin_acl', null, 'acl');
$this->load->helper('admin_ui');
break;
case 'api':
$this->load->library('jwt_auth', null, 'auth');
$this->output->set_content_type('application/json');
break;
default:
$this->load->library('frontend_helper', null, 'helper');
$this->load->library('theme');
}
}
}
// 子控制器
class Admin_Users extends MY_Controller {
public function __construct() { parent::__construct('admin'); }
}
class MY_Controller extends CI_Controller {
public function __construct() {
parent::__construct();
$dir = $this->router->directory; // e.g. 'admin/', 'api/'
match (trim($dir, '/')) {
'admin' => $this->load->library('acl', null, 'acl'),
'api' => $this->load->library('jwt', null, 'auth'),
default => $this->load->library('theme'),
};
}
}
// core/Frontend_Controller.php
class Frontend_Controller extends CI_Controller {
public function __construct() {
parent::__construct();
$this->load->library('theme');
$this->load->helper('frontend');
}
}
// core/Admin_Controller.php
class Admin_Controller extends CI_Controller {
public function __construct() {
parent::__construct();
$this->load->library('acl');
$this->load->model('admin/User_model');
}
}
// 使用
class Home extends Frontend_Controller { ... }
class Admin_Users extends Admin_Controller { ... }
render($view, $data)、setLayout() → 保留在基底控制器 protectedrequireLogin()、checkPermission() → 基底 protected 或 Servicepaginate()、exportCsv() → 移至 Library/Helperparent::__construct()_initAdmin()get_instance() 在 Library/Helper 存取 CI 資源