Symfony 3(FOSrestBundle) + Angular 1 POST 请求为空
Symfony 3(FOSrestBundle) + Angular 1 POST request is empty
这是我的 Angular 服务 :
restFactory.getCalcPrice = function (data) {
return $http({
url:"/api/calc",
method:"POST",
data:{"data": data},
headers: {'Content-Type': 'application/x-www-form-urlencoded'}
})
};
FOSRestBundle 配置:
fos_rest:
param_fetcher_listener: true
body_listener: true
body_converter:
enabled: true
routing_loader:
default_format: json
view:
view_response_listener: 'force'
mime_types:
json: ['application/json', 'application/json;version=1.0', 'application/json;version=1.1']
format_listener:
rules:
- { path: ^/api, priorities: [ json ], fallback_format: json, prefer_extension: true }
- { path: ^/, priorities: [ 'html', '*/*'], fallback_format: ~, prefer_extension: true }
和 Symfony 3 控制器:
/**
* @Post("/calc")
* @View()
* @return array
*/
public function getCalcPrice(Request $request)
{
$req = $request->request->all();
$data = $req['data'];
$data = array(
"data" => $data // in Angular recieving null
);
return $data;
}
所以问题是当我 发布 来自 Angular 的一些数据时,我无法在 Symfony 中获取它。 GET 请求 工作正常。有什么建议么? :)
这是 Chrome 调试的截图:
根据 API doc for Request
class 属性 $request->request
允许您访问所有 $_POST
参数,但您在有效负载中将数据作为 JSON 发送:
所以你应该调用方法getContent()
并手动解码:
$content = $request->getContent();
$json = json_decode($content, true);
$data = $json['data'];
这是我的 Angular 服务 :
restFactory.getCalcPrice = function (data) {
return $http({
url:"/api/calc",
method:"POST",
data:{"data": data},
headers: {'Content-Type': 'application/x-www-form-urlencoded'}
})
};
FOSRestBundle 配置:
fos_rest:
param_fetcher_listener: true
body_listener: true
body_converter:
enabled: true
routing_loader:
default_format: json
view:
view_response_listener: 'force'
mime_types:
json: ['application/json', 'application/json;version=1.0', 'application/json;version=1.1']
format_listener:
rules:
- { path: ^/api, priorities: [ json ], fallback_format: json, prefer_extension: true }
- { path: ^/, priorities: [ 'html', '*/*'], fallback_format: ~, prefer_extension: true }
和 Symfony 3 控制器:
/**
* @Post("/calc")
* @View()
* @return array
*/
public function getCalcPrice(Request $request)
{
$req = $request->request->all();
$data = $req['data'];
$data = array(
"data" => $data // in Angular recieving null
);
return $data;
}
所以问题是当我 发布 来自 Angular 的一些数据时,我无法在 Symfony 中获取它。 GET 请求 工作正常。有什么建议么? :)
这是 Chrome 调试的截图:
根据 API doc for Request
class 属性 $request->request
允许您访问所有 $_POST
参数,但您在有效负载中将数据作为 JSON 发送:
所以你应该调用方法getContent()
并手动解码:
$content = $request->getContent();
$json = json_decode($content, true);
$data = $json['data'];