Vuejs 2和Symfony 3补丁程序REST请求



我的目标是使事件请求补丁,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;
    }

最新更新