CI4匹配参数偏移功能如何使用?请求路由到控制器示例
CodeIgniter 4 路由参数偏移(offset)完整使用示例
场景说明
以带版本号的API为例:我们希望访问 v1/users/123 时,将用户ID 123 传递给 Users 控制器的 show 方法,同时忽略URI中的版本号段 v1。
1. 路由配置(app/Config/Routes.php)
在路由文件中添加以下配置:
<?php namespace Config; use CodeIgniter\Router\RouteCollection; class Routes extends RouteCollection { public function init() { // 使用offset参数跳过版本号段(第一个URI段) $routes->get('v1/users/(:num)', 'Users::show/$1', ['offset' => 1]); // 等价的数组写法(可选) // $routes['v1/users/(:num)'] = 'Users::show/$2'; } }
关键解释:
['offset' => 1]表示跳过1个URI段(即v1),所以路由中捕获的(:num)会被标记为$1,直接传递给控制器方法。- 如果不用offset,你需要写
'Users::show/$2'(因为v1是第一个段,(:num)是第二个段),offset帮你简化了参数索引的计算。
2. 控制器实现(app/Controllers/Users.php)
创建或修改Users控制器,实现show方法接收用户ID参数:
<?php namespace App\Controllers; class Users extends BaseController { public function show(int $userId) { // 模拟返回用户数据 return $this->response->setJSON([ 'code' => 200, 'message' => '成功获取用户信息', 'data' => [ 'user_id' => $userId, 'username' => 'test_user_' . $userId ] ]); } }
3. 测试验证
启动CodeIgniter 4项目后,访问以下URL:
http://your-domain.com/v1/users/123
你会得到如下JSON响应:
{ "code": 200, "message": "成功获取用户信息", "data": { "user_id": 123, "username": "test_user_123" } }
另一个适用场景:多语言路由
如果你的项目是多语言架构,比如访问 en/users/456 要忽略语言段 en,路由配置可以这样写:
$routes->get('(:alpha)/users/(:num)', 'Users::show/$1', ['offset' => 1]);
此时访问 en/users/456,控制器的show方法会收到参数456。
内容的提问来源于stack exchange,提问作者Listantiyo Wiharjanto
相关产品推荐
相关产品推荐

