我的目标是使事件请求补丁,vuejs 2 diens over wirs wirs wirs:
// Link and body is defined and fine
this.$http.patch(linkUrl, this.baseTerms, {someKey:'any value'}).then(response => {
console.log(response.body)
}, response => {
})
在另一边,该请求被Symfony 3 -FosrestBundle捕获,例如:
/**
* @RestPatch("/translations/update-base-delta/", name="update_base_delta")
*/
public function updateBaseDeltaAction(Request $request)
{
$em = $this->getDoctrine()->getManager();
$postData = json_decode($request->getContent(), true);
}
// config.yml:
fos_rest:
unauthorized_challenge: "Basic realm="Restricted Area""
access_denied_listener:
json: true
routing_loader:
default_format: json
这样的结果是:状态代码:405方法不允许
这是请求:
Accept:*/*
Accept-Encoding:gzip, deflate
Accept-Language:en-GB,en-US;q=0.9,en;q=0.8
Access-Control-Request-Headers:content-type
Access-Control-Request-Method:PATCH
Connection:keep-alive
已经提到了缺少的查询字符串参数和请求标头。谁能暗示我是一个有效的例子,或者告诉我,要关注Vuejs或Symfony的哪一部分?
我发现了出了什么问题以及如何实现这一切。 -VUEJS 2:
的请求this.$http.patch(linkUrl, {somePara: 123}).then(response => {
console.log(response.body)
}, response => {
})
//请注意,补丁需要一个前飞行过程(CORS),该过程首先发送选项请求,并以下要求苛刻的标头键:
- 访问控制 - 允许 - 原始
- 访问控制-Allow-Methods
- 访问控制 - 允许头
响应部分:服务器端也必须遵循此前飞行过程。首先,检查是否满足选项和要求 ->发送上述标头键,第二:对请求进行反应。
这是Symfony 3和FOS REST捆绑包集成示例:
/**
* @Options("/translations/update-base-delta/")
*/
public function preflightMyPatchAction(Request $request)
{
$response = new Response();
$response->setContent(json_encode(true));
$response->headers->set('Access-Control-Allow-Methods', 'PATCH');
$response->headers->set('Access-Control-Allow-Origin', '*');
$response->headers->set('Access-Control-Allow-Headers', 'Content-Type');
$response->headers->set('Content-Type', 'application/json');
return $response;
}
/**
* @Patch("/translations/update-base-delta/")
*/
public function myPatchAction(Request $request)
{
$response = new Response();
$response->setContent(json_encode(true));
$data = json_decode($request->getContent(), true);
return $response;
}