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

如何为Yii 2的apiv1模块配置/api/v1格式的路由?

解决Yii2 apiv1模块路由映射到/api/v1的问题

嘿,我来帮你搞定这个Yii2 REST路由的需求~ 你想要把GET /apiv1/likes的访问改成GET /api/v1/likes,有两种思路:要么给整个apiv1模块统一设置路由前缀,要么单独给likes控制器配置规则,下面分别说具体操作:

方案1:为整个apiv1模块统一配置/api/v1前缀

这种方式最省心,模块下所有控制器都能通过/api/v1/xxx访问,推荐用这个方法。

方法A:通过REST UrlRule的prefix属性直接设置

直接修改你现有的REST路由规则,加上prefix参数,同时明确指定模块下的控制器:

'urlManager' => [
    // 记得确保enablePrettyUrl、showScriptName这些基础配置已经正确设置
    'enablePrettyUrl' => true,
    'showScriptName' => false,
    'rules' => [
        [
            'class' => 'yii\rest\UrlRule',
            'controller' => ['apiv1/likes'], // 这里要加上模块前缀apiv1/
            'prefix' => 'api/v1', // 设置新的路由前缀
            // 可选:如果想保留原来的/apiv1/likes路由,把prefix改成数组
            // 'prefix' => ['apiv1', 'api/v1'],
        ],
    ],
];

这样设置后,GET /api/v1/likes就可以正常访问了,如果用数组形式的prefix,原来的/apiv1/likes也会保留生效。

方法B:添加通用模块路由规则

如果你的apiv1模块下有多个控制器,不想逐个配置REST规则,可以加一条通用规则,把所有/api/v1/*的请求都转发到apiv1模块:

'urlManager' => [
    'enablePrettyUrl' => true,
    'enableStrictParsing' => true,
    'showScriptName' => false,
    'rules' => [
        // 匹配api/v1下的所有列表、详情、自定义动作请求
        'api/v1/<controller:\w+>' => 'apiv1/<controller>',
        'api/v1/<controller:\w+>/<id:\d+>' => 'apiv1/<controller>/view',
        'api/v1/<controller:\w+>/<action:\w+>' => 'apiv1/<controller>/<action>',
        
        // 保留原来的apiv1路由(可选)
        [
            'class' => 'yii\rest\UrlRule',
            'controller' => ['likes'],
            'prefix' => 'apiv1',
        ],
    ],
];

这个方法能一次性搞定模块下所有控制器的路由映射,不用重复配置。

方案2:单独为likes控制器配置/api/v1/likes路由

如果只需要给likes控制器设置新路由,不影响模块其他控制器,可以单独加一条REST规则:

'urlManager' => [
    'rules' => [
        // 新的api/v1/likes路由
        [
            'class' => 'yii\rest\UrlRule',
            'controller' => ['apiv1/likes'],
            'prefix' => 'api/v1',
        ],
        // 原来的apiv1/likes路由(可选保留)
        [
            'class' => 'yii\rest\UrlRule',
            'controller' => ['likes'],
            'prefix' => 'apiv1',
        ],
    ],
];

几个重要注意点

  • 一定要确保urlManager的enablePrettyUrl设为true,showScriptName设为false,否则漂亮路由不会生效。
  • 如果开启了enableStrictParsing,要保证所有请求都能匹配到对应的规则,不然会返回404。
  • 控制器名称要写对,apiv1/likes对应的是apiv1模块下的LikesController类。

内容的提问来源于stack exchange,提问作者Paul

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 08:56:43