用Yii::$app->request->post();接收ios传来的数据,将接收到的数据打印出来会显示值为null。如果用$_data = empty($_POST) ? json_decode(file_get_contents('php://input'), TRUE) : $_POST;接收ios传来的数据是可以获取到值,但是只要没有接收到这个数据,这里就会报错。请大神指导一下,关于数据接收的问题
用Yii::$app->request->post();接收ios传来的数据,将接收到的数据打印出来会显示值为null。如果用$_data = empty($_POST) ? json_decode(file_get_contents('php://input'), TRUE) : $_POST;接收ios传来的数据是可以获取到值,但是只要没有接收到这个数据,这里就会报错。请大神指导一下,关于数据接收的问题
检查一下 IOS的HTTP请求头 应该是请求头设置的有问题 我司的ios童鞋请求接口未发生这种情况
可能是iOS传上来的时候没有指定为json格式,
你可以打印 $_SERVER['CONTENT_TYPE'] 看看是否为 application/json,
如果不是,试试
<code class="php">$_SERVER['CONTENT_TYPE'] = 'application/json'; Yii::$app->request->post();</code>
这个应该是ios发的请求包将消息体直接打包成json格式的消息了。
所以php端需要用file_get_contents('php://input')去获取消息体。
鄙人之前是做iOS的 请求头问他请求头是否设置好
再说正规的取出json数据的方法应该是这样的
$body = Yii::$app->request->getRawBody();
json_decode($body,true);
如果你的API是基于Yii2框架来开发的,你完全可以通过如下的方式进行数据接收:
get请求方式:
<code>$value = Yii::$app->request->get("参数名");</code>
post请求方式:
<code>$value = Yii::$app->request->post("参数名");</code>
如果客户端传递数据时的Content-Type是application/json,那么你需要在config.php文件的request部分中配置如下:
<code>'request' => [ 'cookieValidationKey' => '5opbkVM6PYmVxcyNvHG1wK06fkIh0vYG', 'parsers' => [ 'application/json' => 'yii\web\JsonParser' ], ],</code>
这样,你能成功拿到以json的形式传递的值。
如果客户端是将对象序列化为json后传递的,你可以这样接收这个对象并保存到数据库:
<code>$article = new Article(); $article->load(Yii::$app->getRequest()->getBodyParams(), ''); if (!$model->save()) { throw new ServerErrorHttpException('文章保存失败'); }</code>