You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.10 13:21:08