codeigniter 4 原生支持按 http 方法定义路由,如 $routes->get()、$routes->post(),而 ci3 路由不区分请求方法,需在控制器内用 $this->input->method() 手动判断;ci4 默认启用 csrf 保护,非 get/head 请求须带 @csrf;api 开发推荐使用 codeigniter rest server 扩展。

CodeIgniter 3 和 CodeIgniter 4 对 GET/POST 等请求方式的路由支持逻辑不同:CI3 本身不原生区分请求方法,所有路由默认接受任意方法;而 CI4 明确支持按 HTTP 动词定义路由,是真正的“方法敏感”设计。
CodeIgniter 4:用 $routes->get()、$routes->post() 精确控制
CI4 的路由必须在 app/Config/Routes.php 中使用 $routes 实例的方法注册,不再使用 $route 数组。写错语法或混用 CI3 风格会导致路由静默失效。
-
$routes->get('news', 'NewsController::index');—— 仅响应 GET /news -
$routes->post('news', 'NewsController::store');—— 仅响应 POST /news -
$routes->match(['get', 'post'], 'contact', 'PageController::contact');—— 同时接受 GET 和 POST -
$routes->put('api/user/(:num)', 'Api\UserController::update/$1');—— 匹配 PUT /api/user/123,参数自动注入
注意:CI4 默认开启 CSRF 保护(对非 GET/HEAD 请求),表单提交需带 @csrf 或手动添加 _token 字段,否则返回 403。
CodeIgniter 3:靠控制器内判断方法,路由层不区分
CI3 的 application/config/routes.php 中的 $route 是纯路径映射,不识别 HTTP 方法。想实现“同 URL 不同行为”,得在控制器里手动判断:
- 定义统一路由:
$route['submit'] = 'form/handle'; - 在
Form控制器的handle()方法中:
if ($this->input->method() === 'post') {
// 处理 POST 提交
} elseif ($this->input->method() === 'get') {
// 处理 GET 请求(如展示表单)
}
也可用 $this->input->get() 或 $this->input->post() 分别取参,框架会自动过滤和转义。
开箱即用的技能链路由引擎。13 条预定义链覆盖搜索、开发、审查、MLOps、法律、创意等场景,三层路由架构(触发词→SAD反馈→DAG编排),recall@10=96.97%。配置驱动(chains.yaml),零代码扩展。pip install skill-weave-chains 一键安装。
REST 场景推荐:用 CodeIgniter RestServer 扩展
若开发 API,建议搭配官方认可的 CodeIgniter REST Server。它基于 CI3 或 CI4 封装了标准 REST 风格控制器:
-
class Api extends REST_Controller { public function users_get() { ... } }→ 自动响应 GET /api/users -
public function users_post() { ... }→ 自动响应 POST /api/users - 方法名后缀
_get/_post即绑定对应 HTTP 方法,无需手动判断
该扩展还内置 JSON/XML 响应、状态码封装、输入验证等能力,比手写更健壮。
调试提示:确保请求真正进到框架
如果定义了 POST 路由但始终 404 或跳回首页,先排查三件事:
- Web 服务器(Apache/Nginx)是否已配置重写规则,把请求转发给 index.php?没配好,请求根本不会到达 CI
- CI4 是否执行过
php spark serve或清缓存:php spark cache:clear - CI3 是否确认没误删
$route['default_controller'],导致 fallback 到默认控制器
路由不是写完就生效,它需要整个请求链路畅通才能起作用。










