2013-05-01 84 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

相關問題