tgy3300

第 644 位会员

会员
个人信息
  • 加入于 2018-09-08 12:02:19
  • 最后登录时间 3小时前
个人成就
  • 发表文章次数 17
  • 发布回复次数 50
  • 个人主页浏览次数 10
Fecshop-1.7.0.0 版本发布,全新后台模板样式21小时前

@Fecshop [#7楼](#comment7)

http://www.fecshop.com/topic/1660

新版本考虑下这个帖子的建议呗:smile: :stuck_out_tongue_winking_eye:

Fecshop-1.7.0.0 版本发布,全新后台模板样式22小时前

我升级了,可这后台我觉得不好看呀,

appserver 中的 /customer/login/account 接口无法识别fetch提交的post数据9天前

@Fecshop [#24楼](#comment24) 可以了,真是这个问题,我想问下,以后使用vue,通过form提交数据,不用把该配置取消吧?

appserver 中的 /customer/login/account 接口无法识别fetch提交的post数据9天前

@Fecshop [#16楼](#comment16)

'request' => [
            'class' => 'yii\web\Request',
            'parsers' => [
                 'application/json' => 'yii\web\JsonParser',
            ],
        ],

请问下这个是在哪里配置,是不是真的是这个没配置

appserver 中的 /customer/login/account 接口无法识别fetch提交的post数据9天前

@Fecshop #15楼 我打印 $this->parsers[$contentType] 为空,打印 $contentType 显示为 application/json

appserver 中的 /customer/login/account 接口无法识别fetch提交的post数据9天前

后端接口我是用的fecshop的appserver端,没做过二次开发,前端我是用react开发的一个单页应用,与appserver端接口交互是通过fetch封装的一个js函数,现在的问题的是我前端与接口交互时,fetch提交的数据是放在request payload 的,而不是form data,使用Yii::$app->request->post()时,\yii\web\Request.php 的 getBodyParams() 方法识别不了我的 request payload 数据,所以在getBodyParams() 方法中程序走了下面这一步

} elseif ($this->getMethod() === 'POST') {
	$this->_bodyParams = $_POST;
}
appserver 中的 /customer/login/account 接口无法识别fetch提交的post数据9天前

Yii::$app->request->post()一样不能获取到数据,我debug跟了一遍代码,并在3楼说明了原因,是 \yii\web\Request.php 的 getBodyParams() 方法没有兼顾到我的这种情况,需要改下getBodyParams() 方法,我暂时还不怎么改,先用 php://input

appserver 中的 /customer/login/account 接口无法识别fetch提交的post数据21天前

还真不一样,是 \yii\web\Request.php getBodyParams()方法存在bug

appserver 中的 /customer/login/account 接口无法识别fetch提交的post数据21天前

你看你的请求头和我上面截图中的请求头是否一样,我的表单数据都在request payload里

appserver 中的 /customer/login/account 接口无法识别fetch提交的post数据21天前

亲测,真获取不了,我看了我本地的代码

LoginController继承于@fecshop\app\appserver\modules\AppserverController.php文件,该文件也是有

$behaviors['contentNegotiator']['formats']['text/html'] = Response::FORMAT_JSON;

跟了一遍代码, 在\yii\web\Request里的getBodyParams()方法中,

程序走这里
} elseif ($this->getMethod() === 'POST') {
	$this->_bodyParams = $_POST;
}

所以才取不到值

如果程序走这里
if (isset($this->parsers[$contentType])) {
...
}

就不会有问题了

我打印 $this->parsers[$contentType] 为空,打印 $contentType 显示为 application/json

appserver 中的 /customer/login/account 接口无法识别fetch提交的post数据21天前

百度下资料,可以这样接收

$final = file_get_contents('php://input');
$data = json_decode($final, true);

我先暂时这样做,大佬有空看看,这是不是个小问题

用js开发了一个单页应用,api使用了fecshop的appserver,使用登录提交接口出现跨域问题22天前

你刚刚问是不是https,我上线后切换成https,没什么问题吧,

用js开发了一个单页应用,api使用了fecshop的appserver,使用登录提交接口出现跨域问题22天前

好了,问题解决了,感谢大佬:+1:,

现在的请求信息变成这样了

用js开发了一个单页应用,api使用了fecshop的appserver,使用登录提交接口出现跨域问题22天前

好的,上面的问题消失了,现在出现新的提示,

Cross-Origin Request Blocked: The Same Origin Policy disallows reading the remote resource at http://api.zl.com/customer/login/account. (Reason: missing token ‘content-type’ in CORS header ‘Access-Control-Allow-Headers’ from CORS preflight channel).

我的测试环境是centos 7 下的火狐浏览器

用js开发了一个单页应用,api使用了fecshop的appserver,使用登录提交接口出现跨域问题22天前

更新了,问题还是存在,

/customer/login/account

该接口所在的文件是

@fecshop\app\appserver\modules\Customer\controllers\LoginController.php

该文件继承的是 @fecshop\app\appserver\modules\AppserverController.php 文件,上面更新的文件是@fecshop\app\appserver\modules\AppserverTokenController.php,有用吗?

用js开发了一个单页应用,api使用了fecshop的appserver,使用登录提交接口出现跨域问题22天前

现在还是本地开发测试阶段,所以是http,上线后,肯定是https

Your Site Analytics