CodeIgniter3利用composer实现命名空间类的自动加载
CodeIgniter3中是没有使用命名空间的,但是不代表它就不能使用命名空间。根本上讲,命名空间是php的一项功能,从php5.3.0开始就支持了这一功能。CodeIgniter只是没有实现根据命名空间来实现类库的自动加载,但是可以通过第三方类库如composer
来实现其他类库的自动加载。
安装composer
这里只简单介绍一下windows下通过composer安装程序安装。也许以后会写一篇文章来总结composer的安装和使用
下载Composer-Setup.exe,然后按照提示一步步的安装就行了。可参考Download Composer
检测composer是否已经安装成功:新建一个命令行窗口,然后执行命令composer -V
,如果能正确输出composer的版本,那就说明安装成功了。
在CodeIgniter中启用composer自动加载器
CodeIgniter安装配置是按照CI官方文档的安装说明配置的,且没有进行个性化设置,即没有设置$system_path
、 $application_folder
和$view_folder
。
用composer安装依赖
在命令行中切换到CI的根目录,即composer.json
所在的目录,执行命令composer install
。执行完成后,会出现vendor
目录,vendor目录下有文件autoload.php
。
修改composer配置文件
修改文件application/config/config.php
中的配置项$config['composer_autoload']
。修改它的值为上述autoload.php
的路径(相对于index.php
的路径),例如:
$config['composer_autoload'] = 'vendor/autoload.php';
测试composer自动加载器
- 在CI根目录执行命令
composer require smarty/smarty
。Smarty
是个php的模板引擎,这里仅用作测试。 - 修改文件
application/controllers/Welcome.php
,修改index
方法如下:
public function index(){
$smarty = new Smarty();
var_dump($smarty);
}
如果没有提示找不到类Smarty
,并且能正常输出$smarty
的值(不是NULL
)时,说明自动加载器已经正确启用了。
自定义带有命名空间的类
创建Base
类
在application/controllers
目录中创建文件Base.php
。这是个自定义类,用来扩展CI_Controllers
的类。顶级命名空间为app\
,它对应的目录为application/
。于是命名空间app\controlles\
对应目录application/controllers/
。(这应该是符合PSR-4的吧)内容如下
<?php
namespace app\controllers;
use CI_Controller;
defined('BASEPATH') OR exit('No direct script access allowed');
class Base extends CI_Controller{
public function index(){
echo 'This is a msg from class Base.';
}
}
创建Demo
类
在application/controllers
目录中创建文件Demo.php
。这个类用来作为CI中的控制器,要在浏览器中访问,因此不能给它设置命名空间,即不不能包含namaspace
语句。其内容如下
<?php
use app\controllers\Base;
class Demo extends Base{
}
在composer配置文件中加入命名空间的配置
修改CI根目录中的composer.json
。
- 为方便对比,防止改错,假设修改前的文件内容为
{
"description": "The CodeIgniter framework",
"name": "codeigniter/framework",
"type": "project",
"homepage": "https://codeigniter.com",
"license": "MIT",
"support": {
"forum": "http://forum.codeigniter.com/",
"wiki": "https://github.com/bcit-ci/CodeIgniter/wiki",
"irc": "irc://irc.freenode.net/codeigniter",
"source": "https://github.com/bcit-ci/CodeIgniter"
},
"require": {
"php": ">=5.2.4",
"smarty/smarty": "^3.1"
},
"suggest": {
"paragonie/random_compat": "Provides better randomness in PHP 5.x"
},
"require-dev": {
"mikey179/vfsStream": "1.1.*",
"phpunit/phpunit": "4.* || 5.*"
}
}
- 修改后的文件内容(注意在前一项末尾加个英文逗号)
{
"description": "The CodeIgniter framework",
"name": "codeigniter/framework",
"type": "project",
"homepage": "https://codeigniter.com",
"license": "MIT",
"support": {
"forum": "http://forum.codeigniter.com/",
"wiki": "https://github.com/bcit-ci/CodeIgniter/wiki",
"irc": "irc://irc.freenode.net/codeigniter",
"source": "https://github.com/bcit-ci/CodeIgniter"
},
"require": {
"php": ">=5.2.4",
"smarty/smarty": "^3.1"
},
"suggest": {
"paragonie/random_compat": "Provides better randomness in PHP 5.x"
},
"require-dev": {
"mikey179/vfsStream": "1.1.*",
"phpunit/phpunit": "4.* || 5.*"
},
"autoload": {
"psr-4": {
"app\\": "application/"
}
}
}
- 解释配置项
autoload
"autoload": {
"psr-4": {
"app\\": "application/"
}
}
- 键名为顶级命名空间
app\
。这里使用app\\
,第一个\
是转义符 - 键值为命名空间对应的目录
application/
更新composer
在CI根目录执行命令composer update
测试
浏览器访问index.php/demo
,如果正常显示This is a msg from class Base.
则说明配置成功。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南