关于在yii2框架下接口接收ios端传来数据

WBOY
发布: 2016-08-31 08:54:55
原创
1419 人浏览过

用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>
登录后复制
相关标签:
php
来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责声明 Sitemap
PHP中文网:公益在线PHP培训,帮助PHP学习者快速成长!