一个获取 POST 表单的问题 [ 2.0 版本 ]
前端使用 axios 和 Yii 后台交互时,用 file_get_contents("php://input")
才能获取到 POST 过来的数据,而 \Yii:$app->request()->post()
获取不到,有没有什么办法能让 \Yii::$app->request()
这个类也获取到 file_get_contents("php://input")
的数据
最佳答案
-
https://www.php.net/manual/zh/reserved.variables.post.php
Yii:$app->request()->post()
是解析的$_POST
中的数据,所以提交的Content-Type
必须是application/x-www-form-urlencoded
或multipart/form-data
所以解决方案就是修改
axios
的提交类型参考地址
https://www.cnblogs.com/sunjinggege/p/9396589.html如果要像你说的,将
file_get_contents
里的数据也要并到里面,那么要改源码了,或者封装一个request
对象,但是带来的问题是,file_get_contents
获取到了原始的http
请求body
,而非键值,所以合并之后估计会带来一些键值的问题。共 2 条回复谢谢回复,我在 axios 里设置了
headers:{'content-type': 'application/x-www-form-urlencoded'}
,现在后端的\Yii::$app->request()
能接收到 POST 过来的数据了,但是仍然有新的问题。我发送的数据是data:{page:1}
,期待能在后台接收到的是["page" => 1]
这样一个数组,结果接收到的却是["{page:1}" => ""]
这样一个诡异的数组,我继续搜索了一下,利用一个URLSearchParams
的方法可以预处理数据方便后端解析,但是解析出来的是["page" => "1"]
把整型 1 自动变成了字符串"1"
,有没有什么可以直接让后台接收到["page" => 1]
并且不自动转换成字符串类型的方法?
其他 0 个回答
捣捣爸
最后登录:2022-04-26
在线时长:9小时29分
- 粉丝0
- 金钱105
- 威望10
- 积分295