计算机应用基础 在线

2607ThinkPHP5基础

ThinkPHP 接收 Post Json 参数

Postman 测试 API 某 Post 接口

发送请求提示参数验证失败

调试的过程中某次采用通过 Body 表传递参数的方法,API 神奇地通了

TP5通过 strpos 函数在 Header 的 content-type 值中查找 app/json 字符串

必须设置 Header 的 content-type 值为 app/json 才行

否则 TP5 不会认为 传入 Json 参数 并给 Request::post 设值为空

两个知识点

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 参数