比较好奇 ThinkPHP 为什么只接 app/json 而不是 application/json 的 POST 数据?

2019-03-21 07:18:42 +08:00
 SP00F
搞不明白,这两天第一次接触 ThinkPHP 这个框架想写点东西玩。。发现 POST 的时候接收不到数据,最后查了一下才知道接收 JSON 数据在 Content-Type 为 app/json 的情况下才接收 JSON 数据。

非常好奇为什么会是 app/json 而不是 application/json
4833 次点击
所在节点    PHP
15 条回复
Varobjs
2019-03-21 07:21:58 +08:00
因为作者懒?毕竟早期版本,单个大写字母函数都有的框架
lcy630409
2019-03-21 09:05:53 +08:00
框架只是一个符合大部分人的东西
如果你使用框架 却被它束缚了 建议你不要使用 写原生的 才能进步
框架如果和你的项目不符合 可以修改框架!
orqzsf1
2019-03-21 09:23:17 +08:00
```
/**
* @var array 资源类型
*/
protected $mimeType = [
'xml' => 'application/xml,text/xml,application/x-xml',
'json' => 'application/json,text/x-json,application/jsonrequest,text/json',
'js' => 'text/javascript,application/javascript,application/x-javascript',
'css' => 'text/css',
'rss' => 'application/rss+xml',
'yaml' => 'application/x-yaml,text/yaml',
'atom' => 'application/atom+xml',
'pdf' => 'application/pdf',
'text' => 'text/plain',
'image' => 'image/png,image/jpg,image/jpeg,image/pjpeg,image/gif,image/webp,image/*',
'csv' => 'text/csv',
'html' => 'text/html,application/xhtml+xml,*/*',
];
```

高级黑?
bestkayle
2019-03-21 09:27:19 +08:00
要么扯犊子要么就是太菜了。。这怎么可能没有。
conn4575
2019-03-21 09:29:22 +08:00
我不信
allgy
2019-03-21 09:29:56 +08:00
不按规范来呗
liuguang
2019-03-21 15:39:00 +08:00
tp 不按规范来,早就不是一次两次了
ben1024
2019-03-21 19:06:02 +08:00
不发个对应版本呢
SP00F
2019-03-21 19:28:11 +08:00
@ben1024 #8 5.x 版本
ben1024
2019-03-21 19:34:42 +08:00
@SP00F 3 楼已贴出,确定你的框架不是被魔改
SP00F
2019-03-21 19:46:53 +08:00
@orqzsf1 #3 首先我不是高级黑,不要上来就盖一个帽子说人高级黑。是见不得人好奇了解问询一下 PHP 框架的东西?

我纯粹是好奇,并且是确实在用的时候 insomnia 测试 POST 请求,Content-Type 为 app/json 的时候 ThinkPHP 用 Request::instance()->param('username', '', 'trim'); 可以取数据,但是 Content-Type 为 application/json 的时候就取不到数据了。

Google 后没有得到为什么会使用 app/json 所以才提问,也确实有文章说过没有接收到的原因就是因为是 app/json 而不是 application/json
SP00F
2019-03-21 19:54:33 +08:00
@lcy630409 #2 多谢,只是临时接触一下用一下。主要学不在 PHP 这块。
SP00F
2019-03-21 19:55:41 +08:00
@bestkayle #4 我确实菜不是很熟悉 ThinkPHP 但是不能代表我不能咨询一下这个原因,在发这个帖子之前我确实遇到的是用 app/json 能接收数据,用 application/json 就解析不出来数据
SP00F
2019-03-21 19:58:41 +08:00
@ben1024 #10 我在 www.thinkphp.cn 下载的核心版,我全局搜索了一下 app/json 有 6 个文件存在,我给替换了。现在是正常的。再看原压缩包的搜索已经没有。。我不是高级黑

是真的有搜索到并且改过来了,去查了官方 GitHub 的代码也没有这样的情况。Google 是有这样的情况文章在,所以我才来问一下。
Andywo
2023-01-17 18:38:02 +08:00
我 2022 年再问类似的问题,会被你们打死么?

在跨域的情况下,用同一接口测试了下

form 格式请求,能正常拿到 token 及后面的数据
```
fetch("http://fast.com/api/test", {
method:'POST',
headers:{
"Content-Type":"application/x-www-form-urlencoded"
},
body:"token=489b4f53-fbd0-43a3-a453-e39f3539f33b",

})
.then(response => response.json())
.then(result => console.log(result))
```
而 post 请求就不正常了,拿不到 token
```
fetch("http://fast.com/api/test", {
method:"POST",
headers:{
"Content-Type":"application/json"
},
body:JSON.stringify({
"token":"489b4f53-fbd0-43a3-a453-e39f3539f33b"
})

})
.then(response => response.json())
.then(result => console.log(result))
```
我是在 localhost 下另外一个端口发请求的,排除不是跨域的问题,调试断点进去发现$_POST 都是空的,难道我要看下框架源码?

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/546823

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX