2019-11-17 22:38:36 262次浏览 1条回答 0 悬赏 10 金钱

前端使用 axios 和 Yii 后台交互时,用 file_get_contents("php://input") 才能获取到 POST 过来的数据,而 \Yii:$app->request()->post() 获取不到,有没有什么办法能让 \Yii::$app->request() 这个类也获取到 file_get_contents("php://input") 的数据

亿速云

最佳答案

  • 蓝色主旋律 发布于 2019-11-18 07:01 举报

    https://www.php.net/manual/zh/reserved.variables.post.php

    Yii:$app->request()->post() 是解析的 $_POST 中的数据,所以提交的 Content-Type 必须是 application/x-www-form-urlencodedmultipart/form-data

    所以解决方案就是修改 axios 的提交类型

    参考地址
    https://www.cnblogs.com/sunjinggege/p/9396589.html

    如果要像你说的,将 file_get_contents 里的数据也要并到里面,那么要改源码了,或者封装一个request对象,但是带来的问题是,file_get_contents 获取到了原始的 http 请求 body,而非键值,所以合并之后估计会带来一些键值的问题。

    2 条回复
    回复于 2019-11-18 10:54 回复

    谢谢回复,我在 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] 并且不自动转换成字符串类型的方法?

    回复于 2019-11-20 10:33 回复

    已经解决,谢谢

    没有找到数据。
您需要登录后才可以回答。登录 | 立即注册
phoenixzz
见习主管

phoenixzz

注册时间:2019-05-23
最后登录:32分钟前
在线时长:6小时47分
  • 粉丝0
  • 金钱105
  • 威望10
  • 积分265

热门问题