解决 ThinkPHP5 无法接收 客户端 Post 传递的 Json 参数
ThinkPHP5 版本: 5.0.16
这段时间在学习 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
源码的时候发现他们也是用这个方法来获取的初始值]。
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
CentOS7 下配置 Nginx + PHP7 + MariaDB + ThinkPHP5.1
最近突然想学习一下使用一些比较成熟的后台框架,考虑到之前帮大佬打下手的时候用过 ThinkPHP 所以就暂定了以 ThinkPHP 为主要学习目标。 下面是我在服务器端配置 Thinkphp 所需环境而踩的一些坑(且有很多已经是老坑了): 本次配置选择的服务器系统为 Centos7 环境是 Nginx + PHP7 + MariaDB + ThinkPHP5.1 我会按照我个人认为合适的顺序分别介绍他们的安装与配置过程 1. MariaDB 的安装与初始配置 # yum 安装 yum -y install mariadb mariadb-server # 安装完成MariaDB,首先启动MariaDB systemctl start mariadb # 设置开机启动 systemctl enable mariadb # 接下来进行MariaDB的相关简单配置 mysql_secure_installation #首先是设置密码,会提示先输入密码 Enter current password for root (enter for none):# 初次运行直接回车 #设置密码 Set r...
- 下一篇
Windows 下 ThinkPHP5 配置 redis 缓存
最近再写一个小的学校论坛项目,项目是基于 Vue + ThinkPHP5 开发的,在开发过程中遇到一个小问题让我纠结了好久,就是如何实现用户给帖子点赞。 用户给帖子点赞是一个很细节的小功能,在刚开始学习 Web 编程的时候曾经尝试过实现这个功能但总是会莫名其妙的卡住,当时觉得不是问题太难应该是我还没有学习相关的知识,直到最近开发项目的时候才发现问题并没有那么简单,我已经掌握了基本的前后端和数据库的知识但是具体实践起来还是有些困难,于是就百度了一下在V2EX上找到了这样一篇帖子 小菜我准备写一个简单的论坛...,看了里面大佬的回复才发现原来还是知识体系不全面,如大佬所言要很好的实现点赞功能需要借助 redis 等缓存机制来完成快速的读写。 于是我又赶紧补习了一下关于 redis 的一下皮毛并进行了 Windows 下 ThinkPHP5 配置 redis 缓存,过程中还是有几个小坑的,于是写下这篇文章记录一下: 1. 声明 本教程所配置的仅是 Windows 下的开发环境并非服务器环境若需要服务器环境配置请自行百度。 2. 安装 php 的 redis 和 igbinary 拓展 php...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- CentOS关闭SELinux安全模块
- SpringBoot2编写第一个Controller,响应你的http请求并返回结果
- Mario游戏-低调大师作品
- CentOS6,CentOS7官方镜像安装Oracle11G
- SpringBoot2配置默认Tomcat设置,开启更多高级功能
- Windows10,CentOS7,CentOS8安装Nodejs环境
- Docker安装Oracle12C,快速搭建Oracle学习环境
- Windows10,CentOS7,CentOS8安装MongoDB4.0.16
- CentOS8编译安装MySQL8.0.19
- MySQL8.0.19开启GTID主从同步CentOS8