【发布时间】:2017-05-23 16:32:10
【问题描述】:
我在这个上拔头发。 有没有办法在 Slim PHP 中解析表单数据,将数据放入数组中(就像 JSON 一样)。我可能遗漏了一些东西,但我尝试过的一切都将数据踢出一个数组,无法定位表单数据。任何帮助表示赞赏。
Angular 组件(在表单提交时执行):
let memory: any = new FormData();
if (this.memory_images) {
for(var i = 0; i < this.memory_images.length; i++) {
memory.append('memory_images', this.memory_images[i], this.memory_images[i].name);
}
}
memory.append('memory_song', this.memory_song);
memory.append('memory_text', this.memory_text);
memory.append('memory_author', this.memory_author);
memory.append('memory_collection', this.memory_collection);
this.memoriesService.saveMemory(memory).subscribe(data => {
console.log(data);
// returns empty array
});
角度记忆服务:
saveMemory(memory){
let headers = new Headers();
headers.append('Content-Type','multipart/form-data');
return this.http.post('http://{{ my api route }}/api/v1/memories', memory, {headers: headers})
.map(res => res);
}
Slim API 路由:
$app->group(APIV1 . '/memories', function() {
$this->post('', function (Request $request, Response $response, $args) {
var_dump($request->getParsedBody());
return $response
});
});
组件总是返回一个空数组。有趣的是,当通过 Postman 提交表单数据时,数据被返回但作为数组中的字符串(我只发送了两个参数):
array(1) {
["------WebKitFormBoundaryXcRTrBhJge4N7IE2
Content-Disposition:_form-data;_name"]=>
string(181) ""memory_author"
Jack
------WebKitFormBoundaryXcRTrBhJge4N7IE2
Content-Disposition: form-data; name="memory_collection"
12345678
------WebKitFormBoundaryXcRTrBhJge4N7IE2--
"
}
在我需要添加上传图片的功能之前,表单一直有效。之前,我将表单输入收集到一个对象中并作为 JSON 发送到 API。我的理解是,因为我现在需要附加文件,所以我需要将提交作为表单数据发送。它是否正确?谢谢!!!
【问题讨论】:
-
抱歉没理解好...所以 PHP 部分在这里造成了问题?
-
您好,Arslan,我不完全确定出了什么问题。在我看来,有三种可能性:1. 我错误地使用了 JS FormData 对象 2. Slim 无法解析表单数据或 3. Angular 没有正确管理表单数据请求或者我没有正确使用它。
标签: javascript php angularjs json slim