这篇文章主要介绍了thinkphp5 post得不到值如何解决的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇thinkphp5 post得不到值如何解决文章都会有所收获,下面我们一起来看看吧。
创新互联公司坚持“要么做到,要么别承诺”的工作理念,服务领域包括:成都网站设计、网站制作、外贸营销网站建设、企业官网、英文网站、手机端网站、网站推广等服务,满足客户于互联网时代的庆云网站设计、移动媒体设计的需求,帮助企业找到有效的互联网解决方案。努力成为您成熟可靠的网络建设合作伙伴!
thinkphp5 post得不到值是因为TP5是通过strpos函数在Header的content-type值中查找app/json字符串的,其解决办法就是设置Header的content-type值为app/json即可。
解决 ThinkPHP5 无法接收 客户端 Post 传递的 Json 参数
这段时间在学习 API 开发,从网上搞了一个课程在跟着做,就在昨天我又一次碰到了讲师一路畅通我半天调试的情况,遇到的问题是我用 Postman 测试 API 某 Post 接口的时候无论怎么发送请求总是提示我参数验证失败,在我调试的过程中某次采用通过 Body 表传递参数的方法,API 神奇地通了,于是我判断是之前 Json 传递出了问题,就各种在网上搜,然而并没有解决方法[不过 Get 了两个知识点放在文章结尾处]。
关于 TP5 的问题度娘不行就只能查源代码了,于是乎我就跟着错误一点一点的打断点终于被我发现了问题所在~
原来 TP5 是通过 strpos 函数在 Header 的 content-type 值中查找 app/json 字符串,也就是说你必须设置 Header 的 content-type 值为 app/json 才行,否则 TP5 不会认为你传入的是 Json 参数并给 Request::post 设值为空。
以上就解决了 TP5 无法接收 客户端 Post 传递的 Json 参数的问题。
两个知识点:
content-type 为 "application/json" 的数据 php 是不能直接识别的,所以导致 $_POST 数组为空。解决办法:我们只要用 $GLOBALS['HTTP_RAW_POST_DATA'] 把原始数据取出来,然后再 json_decode 就行了[使用此方法,需要设置 php.ini 中的always_populate_raw_post_data 值为 On][$HTTP_RAW_POST_DATA ,包含了 POST 的原始数据。但这不是一个超全局变量,要在函数中使用它,必须声明为 global ,或使用 $GLOBALS['HTTP_RAW_POST_DATA'] 代替。];
可以通过 file_get_contents('php://input') 代替上面的方法直接获取到传入的 Json 参数[我在阅读 TP5 源码的时候发现他们也是用这个方法来获取的初始值]。
thinkphp属于一种免费的开发框架,能够用于开发前端网页,最早thinkphp是为了简化开发而产生的,thinkphp同时也是遵循Apache2协议,最初是从Struts演变过来,也把国外一些好的框架模式进行利用,使用面向对象的开发结构,兼容了很多标签库等模式,它能够更方便和快捷的开发和部署应用,当然不仅仅是企业级应用,任何php应用开发都可以从thinkphp的简单、兼容和快速的特性中受益。
关于“thinkphp5 post得不到值如何解决”这篇文章的内容就介绍到这里,感谢各位的阅读!相信大家对“thinkphp5 post得不到值如何解决”知识都有一定的了解,大家如果还想学习更多知识,欢迎关注创新互联行业资讯频道。