时间:2021-07-01 10:21:17 帮助过:29人阅读
用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,
如果不是,试试
$_SERVER['CONTENT_TYPE'] = 'application/json';
Yii::$app->request->post();
这个应该是ios发的请求包将消息体直接打包成json格式的消息了。
所以php端需要用file_get_contents('php://input')去获取消息体。
鄙人之前是做iOS的 请求头问他请求头是否设置好
再说正规的取出json数据的方法应该是这样的
$body = Yii::$app->request->getRawBody();
json_decode($body,true);
如果你的API是基于Yii2框架来开发的,你完全可以通过如下的方式进行数据接收:
get请求方式:
$value = Yii::$app->request->get("参数名");
post请求方式:
$value = Yii::$app->request->post("参数名");
如果客户端传递数据时的Content-Type是application/json,那么你需要在config.php文件的request部分中配置如下:
'request' => [
'cookieValidationKey' => '5opbkVM6PYmVxcyNvHG1wK06fkIh0vYG',
'parsers' => [
'application/json' => 'yii\web\JsonParser'
],
],
这样,你能成功拿到以json的形式传递的值。
如果客户端是将对象序列化为json后传递的,你可以这样接收这个对象并保存到数据库:
$article = new Article();
$article->load(Yii::$app->getRequest()->getBodyParams(), '');
if (!$model->save()) {
throw new ServerErrorHttpException('文章保存失败');
}