CodeIgniter 自动加载 library 的核心方式是修改 application/config/autoload.php 中的 $autoload['libraries'] 数组;只需将库名(如 'database' 或 'session')以字符串形式加入该数组,框架即在每次请求时自动实例化并挂载到 $this 上。

CodeIgniter 配置自动加载 library 的核心方式是修改 application/config/autoload.php 文件中的 $autoload['libraries'] 数组。只要正确填写类名,框架会在每次请求初始化时自动实例化并挂载到 $this 上(如 $this->database),无需在每个控制器里重复调用 $this->load->library()。
配置 autoload.php 文件
打开 application/config/autoload.php,找到 $autoload['libraries'] 这一行。它默认是一个空数组:
$autoload['libraries'] = array();
将你需要自动加载的库名以字符串形式加入该数组,例如:
$autoload['libraries'] = array('database');$autoload['libraries'] = array('session', 'email');- 支持子目录写法:
$autoload['libraries'] = array('smarty/Smarty');(对应libraries/smarty/Smarty.php)
注意:库文件名需与类名一致(如 Mylib.php 对应类 Mylib),且首字母大写;CI 会自动尝试加载 APPPATH.'libraries/' 下的文件。
自定义库或第三方库的路径处理
若库不在标准 libraries/ 目录下,或属于第三方包,有几种常用方式:
- 把库文件直接放入
application/libraries/,然后按名称写入 autoload 数组 - 使用
add_package_path()指向第三方包目录(如application/third_party/mylib/),再手动加载;但这种方式不支持自动加载,需在构造函数中显式调用$this->load->library('mylib') - Composer 管理的库建议通过服务容器或 Factories 加载,而非依赖 autoload.php —— 因为 autoload.php 只处理 CI 原生加载器逻辑
验证是否生效
配置保存后,在任意控制器方法中直接使用即可,无需再 load:
class Home extends CI_Controller
{
public function index()
{
$this->db->get('users'); // database 已自动可用
$this->session->set_userdata('foo', 'bar'); // session 同理
}
}如果报错 “Call to a member function xxx() on null”,请检查:
- 库文件是否存在且命名规范(如 Database.php → 类名 CI_Database 或 Database)
- autoload.php 中没有拼写错误或多余空格
- 是否启用了正确的环境(ENVIRONMENT 设置影响 db_debug 等行为,但不影响加载本身)
进阶:带参数的库自动加载
autoload.php 不支持直接传参(如配置数组)。若库构造函数需要参数,可:
- 改用构造函数中手动加载:
$this->load->library('mylib', ['host' => 'api.example.com']); - 在库内部读取 config(
$this->config->item('mylib_config')),把参数写进config/mylib.php并加入$autoload['config'] - 升级到 CodeIgniter 4 后,优先使用 Factories 机制,它支持带选项的实例化和跨请求复用


















