PHP框架里有个怪胎:Laravel堆功能堆到臃肿,它偏要反着来。CodeIgniter 4(CI4)的代码量只有前者的三分之一,却在2024年 still 活着,而且活得不错。
这篇不讲情怀,只画地图。读完你会知道一个HTTP请求进CI4之后,每一步被谁处理、代码该往哪写。
请求从哪进:入口文件与生命周期
所有请求先撞public/index.php,这是唯一入口。它干三件事:定义路径常量、引入自动加载、把控制权交给CodeIgniter核心类。核心类启动后,按固定顺序点火:加载配置→初始化日志→启动Session→解析路由→匹配控制器→执行过滤器→跑业务代码→渲染视图→返回响应。
整个过程像工厂流水线,每个工位只干一件活。CI4把这条线暴露得很干净,不像有些框架藏在一堆Provider和Service Container后面。
路由:从URL到控制器的匹配规则
路由文件在app/Config/Routes.php。CI4支持三种写法:闭包直接返回、指向控制器方法、或者命名路由反向生成URL。
关键细节:路由按定义顺序匹配,第一条命中就停。所以要把具体规则放上面,通配符放下面。RESTful资源路由用$routes->resource()一行搞定,会自动映射到标准的index/show/create/store/edit/update/destroy七个方法。
过滤器(Filter)可以绑在路由上,比如$routes->get('admin', 'Admin::index', ['filter' => 'auth'])。这是CI4的中间件实现,比CI3的Hook更直观。
控制器、模型与数据库层
控制器在app/Controllers/,继承BaseController就能拿到请求对象、响应对象、验证器、Session等全套工具。CI4的控制器很薄,推荐把业务逻辑塞到Model里。
模型层有两个选择:Entity+Model的ORM风格,或者直接Query Builder写原生SQL。Query Builder的链式调用设计得克制,没有Laravel Eloquent那种"魔法方法"陷阱。
数据库配置在.env或app/Config/Database.php,支持读写分离。迁移(Migration)和种子(Seeder)用Spark命令行跑,下面会讲。
视图、过滤器与配置系统
视图支持传统PHP模板,也支持简单的布局继承。渲染用return view('name', $data),数据自动转义防XSS。
过滤器(Filter)是CI4的新东西,三个钩子:before(路由匹配后、控制器前)、after(控制器后、视图前)、afterView(视图渲染后)。做权限校验、API签名验证、响应头注入都很顺手。
配置类在app/Config/,用属性存配置值,支持多环境覆盖。不像有些框架搞YAML/JSON/PHP混用,CI4就一种:PHP数组,快且可缓存。
Spark CLI:命令行工具集
Spark是CI4的内置CLI,php spark list看全部命令。常用:make:controller生成控制器骨架,migrate跑数据库迁移,db:seed灌测试数据,serve启动开发服务器。
自定义命令很简单,继承BaseCommand,写好run()方法,注册到app/Config/Commands.php。CI4的CLI和Web层共享模型和配置,不用维护两套逻辑。
CI4的文档里藏着一句话:「框架应该帮你做决定,但不该替你做决定。」这解释了为什么它没有ORM关联预加载、没有队列系统、没有开箱即用的API认证——这些你按需自己接。问题是,2024年了,你愿意为"轻量"放弃多少便利?
特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。
Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.