记一则因英语不好引起的 404 惨案(Yii2 RESTful) [ 技术分享 ]
使用 Yii2 做 restful 接口,大家都知道Yii默认的路由规则会自动识别url的名词改为负数形式。
如果你的rules是这样配置的
'rules' => [
['class' => 'yii\rest\UrlRule', 'controller' => 'v1/tag'],
]
你的控制器是TagController,假如要获取所有的tag列表,你的URL需要是这样的 http://restful-lc.com/v1/tags
,然后你如期得到了所有的tag列表。
这只是Yii的基础知识,就不做过多的解读,接下来坑来了...
假如你有一张表叫Hero,你的控制器是HeroController,现在你想获取所有的hero列表,你会怎么访问这个接口?
'rules' => [
['class' => 'yii\rest\UrlRule', 'controller' => ['v1/tag', 'v1/hero']],
]
你顺手写下了这样的URL请求 http://restful-lc.com/v1/heros
,然后发送,然后你得到了这样的响应。
what ???
这是为什么呢?
难道hero是什么关键字? 不可能,这哥们不像。 难道是表不存在? 不可能,都是gii自动生成的。
于是你继续测试,你又新建了一个控制器是ChipController,表名chip,然后访问http://restful-lc.com/v1/chips
,果然又收到了正确的响应结果,返回了chip列表。
然后如法炮制,你又新建了一个控制器是TechController,表名tech,然后访问http://restful-lc.com/v1/techs
,然后又是这样的响应。
...
这是不是不太科学,在你一筹莫展、抽了三根烟、头发要掉光的时候,你忽然想起你的小学英语老师教你的的英语语法知识,ch结尾的名词复数形式是不是一般加es,比如match --> matches,以o结尾的单词的复数好像也是加es。
然后你抱着你访问了http://restful-lc.com/v1/heroes
,果然你得到了正确的数据列表。
这...
Yii好牛逼啊,于是你追下框架源码
然后你就看到了这行代码
原来Yii做了简单的规则匹配,hero被换成了heroes。
真像大白,看来程序员不会点基本的语法,还真写不了代码了,哈哈。
如果你不想这样猜来猜去,你可以把pluralize
参数的值设置为false,代表Yii不会帮我们做自动复数处理,你可以直接用http://restful-lc.com/v1/hero
访问获取结果。
最后放上一个英文单数变复数的链接供大家学习 英语单词在使用复数的时候什么时候加S 什么时候es
无耻的推广下Yii2写的技术论坛https://www.shiqidu.com
共 6 条回复
-
fly_boy_hss 回复于 2019-04-25 10:04 举报
哈哈,厉害了
marslu 北京
最后登录:2023-08-14
在线时长:16小时27分
- 粉丝2
- 金钱518
- 威望10
- 积分778