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