无法从Symfony中的POST请求访问参数

时间:2014-05-12 18:19:00

标签: symfony fosrestbundle

我正在制作REST API,其中包括get-methods和post-methods。 get方法按计划工作,但是当我使用相同的技术访问post-methods中的参数时,它不起作用。

以下是后置控制器的示例(出于测试目的,它实际上并没有做任何有用的事情,只是尝试访问我发送的名称参数):

    /**
     *
     * Post a resource
     *
     * @ApiDoc(
     *    section="/resources"
     * )
     *
     *
     * @Rest\QueryParam(name="name", requirements="[a-z]+", default="Default name", description="Something")
     *
     *
     * @param Request $request
     * @return array
     *
     * @Rest\View()
     * @param ParamFetcher $paramFetcher
     */
    public function cpostAction(Request $request){

        //$name = $paramFetcher->get('name');
        $name = $request->get('name');
        $testArr = array();
        $testArr['name'] = $name;
        return $testArr;
    }

} // "api_post_resources"       [post] /resources

以下是请求正文:

Request Url: http://localhost:8080/utdanningsprosjekt/REST/Corsane/web/app_dev.php/api/resources.json
Request Method: POST
Status Code: 200
Params: {
    "name": "test"
}

以下是返回的内容:

[]

我尝试访问该参数的其他一些方法是:

  • $ name = $ paramFetcher-> get(' name');
  • $ name = $ request-> query-> get(' name');
  • $ name = $ request-> request-> get(' name');

如上所述,当方法是get方法时,访问参数没有问题,但是当它是POST请求时,它似乎不起作用。在某些时候我能够使它工作,但我不知道为什么,并且无法重现它。

Screenshot from the REST Console Chrome-extension, that I use to test the requests

你们中的任何人都知道问题是什么,或者知道它可能是什么或与之有什么关系?任何帮助都将深表感谢!

4 个答案:

答案 0 :(得分:1)

当我切换到使用x-www-form-urlencoded格式或表单数据格式(以及从REST Console chrome扩展程序到Postman - REST Client chrome扩展程序时,它开始工作了,尽管这可能不是与它有任何关系)。

因此以下请求有效(x-www-form-urlencoded格式):

  

POST /utdanningsprosjekt/Corsane/web/app_dev.php/api/resources.json   HTTP / 1.1主机:localhost:8080缓存控制:无缓存内容类型:   应用程序/ x-WWW窗体-urlencoded

     

名=试验&安培; URL = www.test.com

并且这个(表单数据格式)也可以使用:

  

POST /utdanningsprosjekt/Corsane/web/app_dev.php/api/resources.json   HTTP / 1.1主机:localhost:8080 Cache-Control:no-cache

     

---- WebKitFormBoundaryE19zNvXGzXaLvS5C Content-Disposition:form-data;名称= “名称”

     

TOR   ---- WebKitFormBoundaryE19zNvXGzXaLvS5C Content-Disposition:form-data;名称= “URL”

     

www.hey.com   ---- WebKitFormBoundaryE19zNvXGzXaLvS5C

虽然这不起作用(原始格式):

  

POST /utdanningsprosjekt/Corsane/web/app_dev.php/api/resources.json   HTTP / 1.1主机:localhost:8080 Cache-Control:no-cache

     

[{ “名称”: “TOR”}]

由于JSON是首选格式,我将研究如何处理服务器端的json格式化POST请求,并感谢任何有关此问题的输入,但至少我不再感到在通过REST API发布数据时无能为力:)

答案 1 :(得分:0)

如果要从请求中访问json数据,则应启用body listeners

答案 2 :(得分:0)

可能与此No POST data received Symfony

有关

您的GET请求正在运行,因为当您被重定向时,正在传递查询参数,但数据不会传递给POST请求。

你可能只是在某个地方重写错误。您可以使用跟随重定向跟踪

答案 3 :(得分:0)

/**
 * @param string $paramName
 * @return mixed
 */
protected function _getParam($paramName)
{
    $param = $this->getRequest()->request->get($paramName);
    if (!$param) {
        $params = json_decode($this->getRequest()->getContent(), true);
        if (array_key_exists($params[$paramName])) {
            $param = $params[$paramName];
        }
    }

    return $param;
}