CodeIgniter路由与控制器需手动配对,CI4默认关闭自动路由;必须在Routes.php中显式声明如$routes->get('/home', 'Home::index'),路径以/开头、控制器首字母大写、方法小写,配完需执行php spark cache:clear生效。

CodeIgniter 的路由和控制器不是自动连通的,必须手动配对才能让 URL 正确调用方法。新手最常卡在访问 /home 却报 404,根本原因就是没写路由——CI4 默认关闭自动路由,一切都要显式声明。
基础路由必须手写
即使你已创建 app/Controllers/Home.php 并写了 index() 方法,也得在 app/Config/Routes.php 里加这一行:
-
$routes->get('/home', 'Home::index');—— 访问http://localhost/home才会触发 -
$routes->get('/', 'Home::index');—— 根路径也要单独配,不能省略 - 路径必须以
/开头,控制器名首字母大写,方法名小写,双冒号不可替换成点或单冒号 - 配完记得运行
php spark cache:clear,否则新路由不生效
动态参数要靠占位符捕获
带变量的 URL(比如 /product/123 或 /user/john)不能硬编码,得用占位符传参:
-
$routes->get('/product/(:num)', 'Product::view/$1');——(:num)只匹配数字,$1把值传给view()方法的第一个参数 -
$routes->get('/user/([a-zA-Z][a-zA-Z0-9_]{2,19})', 'User::profile/$1');—— 用正则限制用户名格式,避免无效请求打到数据库 - 控制器中接收参数必须带类型提示,如
public function view(int $id),否则会报错
关键配置项不能错
路由跑不通,往往不是写法问题,而是底层环境没配对:
- Web 根目录必须指向
public/(例如 XAMPP 的httpd.conf指向htdocs/yourapp/public/),不能指向项目根或app/ -
app/Config/App.php中的$baseURL应设为'http://localhost/',不能带/yourapp/public/路径 -
.htaccess必须存在且生效(位于public/目录下),Apache 需开启mod_rewrite,并设置AllowOverride All - 开发时确保
.env中CI_ENVIRONMENT = development,方便看到真实错误信息
资源路由适合 CRUD 场景
如果要做标准增删改查,不用一条条写,直接用 resource() 自动生成全套路由:
-
$routes->resource('posts');会生成GET /posts、GET /posts/new、POST /posts、GET /posts/(:num)/edit等 7 条常用路由 - 对应控制器需继承
ResourceController,并实现index()、show()、create()等方法 - 可配合命名空间、前缀使用,例如
$routes->prefix('admin')->resource('users');



















