ci4支持$routes->resource()一键生成restful路由,ci3需手动逐条配置。ci4中可指定控制器、限制动作、自定义占位符;ci3需处理_method模拟put/delete,并注意路由顺序防冲突。

CodeIgniter 本身没有内置的 resource 路由关键字(如 Laravel 的 Route::resource()),但可以通过手动配置一组标准 RESTful 路由规则,模拟资源路由行为。是否支持“自动 resource”取决于版本:CI3 不提供该功能,需手写;CI4 借助 $routes->resource() 方法可一键生成标准七种 REST 动作路由。
CI4 中使用 $routes->resource() 配置资源路由
在 app/Config/Routes.php 中调用:
-
基础写法:
$routes->resource('photos');→ 自动生成 GET /photos、GET /photos/new、GET /photos/(:id)/edit、POST /photos、GET /photos/(:id)、PUT /photos/(:id)、DELETE /photos/(:id) -
指定控制器与命名空间:
$routes->resource('api/users', ['controller' => 'Api\Users']); -
限制动作(只启用部分):
$routes->resource('posts', ['only' => ['index', 'show', 'create', 'store']]); -
排除特定动作:
$routes->resource('comments', ['except' => ['edit', 'delete']]); -
自定义参数占位符:
$routes->resource('articles', ['placeholder' => '([a-zA-Z0-9\-_]+)']);(替代默认(:any)或(:num))
CI3 中模拟资源路由需手动定义
在 application/config/routes.php 中逐条声明,注意顺序(具体在前、泛化在后):
开箱即用的技能链路由引擎。13 条预定义链覆盖搜索、开发、审查、MLOps、法律、创意等场景,三层路由架构(触发词→SAD反馈→DAG编排),recall@10=96.97%。配置驱动(chains.yaml),零代码扩展。pip install skill-weave-chains 一键安装。
$route['photos']['GET'] = 'photos/index';$route['photos/new']['GET'] = 'photos/create';$route['photos/(:num)']['GET'] = 'photos/show/$1';$route['photos/(:num)/edit']['GET'] = 'photos/edit/$1';$route['photos']['POST'] = 'photos/store';$route['photos/(:num)']['PUT'] = 'photos/update/$1';$route['photos/(:num)']['DELETE'] = 'photos/destroy/$1';
⚠️ 注意:PUT 和 DELETE 请求在表单中需通过隐藏字段 _method 模拟,或使用 AJAX 发送原生请求;CI3 默认不自动解析 _method,需自行在控制器中处理。
资源路由对应的标准控制器方法命名
无论 CI3 或 CI4,约定俗成的控制器方法名保持一致(推荐遵循):
-
index()— 列表页 -
show($id)— 单条详情 -
create()— 新建表单页 -
edit($id)— 编辑表单页 -
store()— 接收 POST 创建 -
update($id)— 接收 PUT/PATCH 更新 -
destroy($id)— 接收 DELETE 删除
验证与调试资源路由
配置完成后务必验证是否生效:
-
CI4:运行命令
php spark routes查看完整注册列表,确认 resource 生成的路由已存在 -
CI3:访问对应 URL,观察是否正确映射到目标控制器方法;若 404,请检查
.htaccess是否生效、mod_rewrite是否开启、以及路由顺序是否被更宽泛规则拦截 - 浏览器测试时建议使用无痕窗口,避免缓存重定向干扰判断










