跳转到主内容
极星编程网:以代码为星,赴技术山海!

CodeIgniter版本4安装和版本3有什么区别_CodeIgniter版本差异安装比较【说明】

CI4必须用composer安装且Web根目录指向public/,配置、路由、控制器、命名空间等均与CI3不兼容,需严格遵循PSR-4和新类结构。 CI4 的安装方式和入口结构完全不同 CodeIgniter 4 不是“解压即用”,它必须通过
composer create-project
安装,且 Web 服务器根目录必须指向
public/
目录,否则会直接暴露
app/
、
system/
等敏感路径。CI3 可以随便放,
index.php
在哪,网站根目录就能设在哪。 CI4 正确安装命令:
composer create-project codeigniter4/appstarter myproject
Apache/Nginx 配置必须让域名解析到
myproject/public/
,不是项目根目录 如果仍把根目录设在项目根,访问时会报错:
Whoops! We seem to have hit a snag. Please try again later…
—— 这不是代码错,是路径错 CI3 的
application/
和
system/
合并在一个目录里;CI4 拆成
app/
(你写)、
system/
(框架核心)、
public/
(仅入口和静态资源)三层 命名空间和控制器写法不兼容 CI3 的
$this->load->view()
和继承
CI_Controller
在 CI4 中完全失效,强行照搬会报
Class 'CI_Controller' not found
或
Call to undefined method
。 CI4 控制器必须声明命名空间:
namespace App\Controllers;
必须继承
BaseController
,不是
CI_Controller
返回视图不再用
load->view()
,而是
return view('welcome_message');
所有自定义类(如服务类、库)都得加命名空间,且要符合 PSR-4 自动加载规则,否则
new MyService()
会找不到类 配置文件从数组变成类属性 CI3 的
application/config/database.php
是个 return 数组的 PHP 文件;CI4 的
app/Config/Database.php
是个类,配置项是 public 属性,改错位置或类型(比如把字符串写成数组)会导致启动失败,但错误提示可能很隐晦。 数据库配置现在是:
public $default = [ 'DSN' => '', 'hostname' => 'localhost', ... ];
路由配置从
application/config/routes.php
移到
app/Config/Routes.php
,语法也变了:
$routes->get('home', 'Home::index');
开启调试模式不能只改
index.php
,还要确保
app/Config/Boot/development.php
被加载,否则
ini_set('display_errors', '1')
不生效 CI3 的
$config['base_url']
在 CI4 中由
App.php
的
public $baseURL = 'http://localhost:8080/';
控制,漏设会导致 CSS/JS 404 路由定义更灵活但也更容易配错 CI4 支持闭包路由、路由组、
resource()
快捷注册,看着方便,但新手常因大小写、命名空间路径或参数占位符写法出问题,导致 404 却查不到原因。 闭包路由示例:
$routes->add('ping', function() { return 'pong'; });
—— 注意不是
function() { echo 'pong'; }
,必须 return 字符串 RESTful 路由:
$routes->resource('users');
会自动绑定 5 个标准方法,对应控制器必须是
App\Controllers\Users
,且方法名严格为
listAll()
、
show($id)
等 参数占位符从 CI3 的
(:any)
改为
(:segment)
、
(:num)
,写成
(:id)
会直接忽略匹配 路由顺序很重要:越具体的路由要越靠前,否则
$routes->get('(:any)', 'Pages::view');
可能吞掉所有其他路由 最常被跳过的其实是环境切换逻辑——CI4 默认用
.env
文件控制环境,但很多人复制完项目就忘了改
CI_ENVIRONMENT = development
,结果调试信息全关了,连
Whoops!
错误都不显示。这比语法错误还难排查。

相关文章