记一则因英语不好引起的404惨案(Yii2 restful)

19-03-21 18:45 字数 1100 阅读 1971 已编辑

使用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,然后发送,然后你得到了这样的响应。

404

what ???

懵逼t

这是为什么呢?

难道hero是什么关键字? 不可能,这哥们不像。 难道是表不存在? 不可能,都是gii自动生成的。

于是你继续测试,你又新建了一个控制器是ChipController,表名chip,然后访问http://restful-lc.com/v1/chips,果然又收到了正确的响应结果,返回了chip列表。

然后如法炮制,你又新建了一个控制器是TechController,表名tech,然后访问http://restful-lc.com/v1/techs,然后又是这样的响应。

404

...

这是不是不太科学,在你一筹莫展、抽了三根烟、头发要掉光的时候,你忽然想起你的小学英语老师教你的的英语语法知识,ch结尾的名词复数形式是不是一般加es,比如match --> matches,以o结尾的单词的复数好像也是加es

然后你抱着你访问了http://restful-lc.com/v1/heroes,果然你得到了正确的数据列表。

alt text

这...

Yii好牛逼啊,于是你追下框架源码

alt text

alt text

然后你就看到了这行代码

alt text

原来Yii做了简单的规则匹配,hero被换成了heroes。

真像大白,看来程序员不会点基本的语法,还真写不了代码了,哈哈。

如果你不想这样猜来猜去,你可以把pluralize参数的值设置为false,代表Yii不会帮我们做自动复数处理,你可以直接用http://restful-lc.com/v1/hero访问获取结果。

最后放上一个英文单数变复数的链接供大家学习 英语单词在使用复数的时候什么时候加S 什么时候es

1人点赞>
关注 收藏 改进 举报
2 条评论
排序方式 时间 投票
草芥

还是pluralize设置为false比较省心

Up骚年
我以为这么觉得
请登录后发表评论
站长 @ 十七度
文章
384
粉丝
23
喜欢
195
收藏
31
排名 : 1
访问 : 144.97万
私信