2013-05-01 86 views
3

我想弄清楚如何发送PUT请求中的参数。我有一个很好的JavaScript接口,所以我知道服务器端工作,但我的单元测试从不正确地发送PUT参数。以下是我已经试过:如何在ZendFramework2中发送PUT请求?

$this->request->getQuery()->set("id", $id); 
$params = array(
     'attribute' => 'email', 
     'email' => '[email protected]', 
); 
// Set the data to be validated 
$this->request->setMethod('PUT'); 

// Send the additional parameters 
$this->request->setContent(json_encode($params)); 

这犯错,因为服务器寻找$ params键“属性”,但在服务器上$ params数组是空的 - 没有$ PARAMS中获得通过。也是一样,当我尝试

foreach ($params as $n => $v) { 
    $this->routeMatch->setParam($n, $v); 
} 

foreach ($params as $n => $v) { 
    $this->request->getQuery()->set($n, $v); 
} 

foreach ($params as $n => $v) { 
    $this->request->getPost()->set($n, $v); 
} 

在zf2中发送PUT参数的正确方法是什么?

+0

您可以使用'$ this-> request-> getPost() - > fromArray'来代替foreach循环来复制数组。 – Maxence 2013-11-15 13:19:36

回答

3

解决方法是将Content-Type标头设置为application/json。然后

$this->request->setContent(json_encode($params)); 

的作品。唯一的问题是它打破了我所有的POST请求,这些请求都是使用getPost()->set($n,$v)。我不得不回到每个测试中,并且对他们做同样的setContent,然后他们也通过了。

+0

要添加标头,请使用以下代码:$ headers = new Headers(); $ headers-> addHeaderLine('Content-type','application/json'); $这 - >请求 - > setHeaders($头);' – Maxence 2013-11-15 13:17:42

相关问题