Yii2的yii\rest\UrlRule如何配置单复数混合的REST路由规则
问题原因
之前配置不生效的核心原因是yii\rest\UrlRule下的extraPatterns定义的路由,会自动拼接当前控制器的路由前缀。你写的GET users => user实际会被解析为匹配GET user/users路径,无法匹配根路径下的/users请求,所以访问会返回404。
正确配置
Yii2路由按照配置顺序从上到下匹配,排在前面的规则优先级更高。只需要在原有REST规则前新增一条独立规则匹配GET users请求,再保留关闭复数的REST规则即可,完整配置如下:
'rules' => [ // 高优先级匹配GET users请求,指向用户列表接口 'GET users' => 'user/index', [ 'class' => 'yii\rest\UrlRule', 'controller' => 'user', 'pluralize' => false, ], ]
匹配效果
配置后各接口路由表现符合预期:
GET users:返回全量用户列表GET user/<id>:保持单数形式,返回指定ID的用户详情POST user:正常创建新用户
如果不需要保留默认的GET user列表路由(避免多个路径指向同一个接口),可以在REST规则中加except参数移除默认列表路由:
[ 'class' => 'yii\rest\UrlRule', 'controller' => 'user', 'pluralize' => false, 'except' => ['index'], ]
内容的提问来源于stack exchange,提问作者trejder
相关产品推荐
相关产品推荐

